複数選択の際のアラート表示について

・テーブルを使用してます

・テーブルの中の入力項目の1つの入力内容によってアラートが出るようにしたいです

・そのひとつの入力内容は、選択肢が複数あり、その中の特定の3つを選択したらアラートが出るようにしたいです。

・選択は複数選択が可能です。

・申請した瞬間にアラートがなるのではなく(要は申請者にはアラートが出ない)、それを処理する人(ステータスを着手中に変更する人)のときにアラート表示させたい。

 

現在、一つだけ選択した場合は、アラートが出るべき選択肢のときにきちんとアラートが出ます。

ただし、アラート必要なものとアラート不要なものを2つ同時選択した場合、アラートが出ません・・・。

配列 というものがかかわってるのだろう・・・ということは推測できるのですが、

よくわからず・・・

教えていただけますと幸いです・・・。

*******

kintone.events.on( [‘app.record.detail.show’,
      ‘mobile.app.record.detail.show’,
      ‘app.record.detail.process.proceed’,
      ‘app.record.create.change.申請内容’,
      ‘app.record.edit.change.申請内容’ ],
    function(event) {
      var tableRecords = event.record.申請内容.value;
      if (event.nextStatus.value == “着手中”) {
      for (var i = 0; i < tableRecords.length; i++) {
      if((tableRecords[i].value[‘種類’].value == ‘サンプル1’)||(tableRecords[i].value[‘種類’].value == ‘サンプル2’)||(tableRecords[i].value[‘種類’].value == ‘サンプル3’)){
        window.alert(‘この内容がアラート表示される’);
      } 
      }
      return event;
    }});

        if (
          tableRecords[i].value['種類']['サンプル1'] ||
          tableRecords[i].value['種類'].value == 'サンプル2' ||
          tableRecords[i].value['種類'].value == 'サンプル3'
        ) {
          window.alert('この内容がアラート表示される');
        }

にelseでifがtrueにならなかったときの種類の中身を表示するよう追記して、複数選択して実行してみてください。もしくは、デバッガーでブレイクポイントを入れてみてください。

複数選択した場合の対応になっていないと思います。

//ユーザーが選択したものの配列
const choices = ['サンプル1', 'サンプル2', 'サンプル5'];
//選択してはいけないものの配列
const badchoices = ['サンプル2', 'サンプル3', 'サンプル4'];

//A案
const result = choices.filter((choice) => badchoices.includes(choice));
console.log(result.length);

//B案
const isNotGood = (element) => badchoices.includes(element);
console.log(choices.some(isNotGood));

https://developer.cybozu.io/hc/ja/articles/360038920252-kintone%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%AE%E6%B5%81%E3%82%8C%E3%82%92%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%82%88%E3%81%86

371966959511様 コメントありがとうございます!

書いてみたのですがうまくいかず・・・

テーブルレコード内の選択なので通常の配列選択だと動作しないのでしょうか・・・

(function () {
  'use strict';
  kintone.events.on('app.record.detail.show', function (event) {
    const tableRecords = event.record.申請内容.value;
    for (let i = 0; i < tableRecords.length; i++) {
      if (
        tableRecords[i].value['種類'].value == 'sample1' ||
        tableRecords[i].value['種類'].value == 'sample2' ||
        tableRecords[i].value['種類'].value == 'サンプル3'
      ) {
        window.alert('この内容がアラート表示される');
      } else {
        console.log(tableRecords[i].value['種類'].value);
      }
    }
    return event;
  });
})();

として実行すると

[‘sample1’, ‘sample3’]

と表示されました。テーブルレコード内の複数選択なので通常の配列選択とは違うのか?という点は違わないと思われます。

371966959511様 何度もありがとうございます!

わたしの説明が分かりにくくてすみません

選択肢が全部で11個あります。

そのうちの特定の3つを選択したら(仮にAとBとCとします)、アラートがなるようにしたいです。

AorBorCのどれかひとつ選択した場合 ⇛ アラート発動

AorBorCのどれかひとつ&その他(仮にDとEとFとGとHとIとJとKとします)を同時選択した場合 → アラートが発動したい。※でも現状アラート発動しない。

※AとD、BとEなどの組み合わせ

else {}   の中にすべての選択パターンをいれる方法になってしまいますか・・・?

状況がわかりました。

elseのなかに入れていく形なりますね。

念のため確認です。たとえば、A or B or Cがない場合でDのみを選択された場合はどうなりますか?

371966959511様

Dのみの場合は、アラートは無しにしたいです!

ちなみにA+Bの二つ選択した場合はアラート発動したいです。

※ようはAとBとCのどれか1つでも組み合わせの中に入ってたらアラート発動

AとBとCがひとつも選ばれてなかったら、アラート無し

え、

https://developer.cybozu.io/hc/ja/community/posts/7327964622361/comments/7460609662105

「AorBorCのどれかひとつ&その他(仮にDとEとFとGとHとIとJとKとします)を同時選択した場合 → アラートが発動しません」

「※ようはAとBとCのどれか1つでも組み合わせの中に入ってたらアラート発動」

の内容と矛盾しませんか?

371966959511様

自分でわかりにくくしてしまってました・・・・。

①AorBorCのどれかひとつ選択した場合 ⇛ アラート発動します

②AorBorCのどれかひとつ&その他(仮にDとEとFとGとHとIとJとKとします)を同時選択した場合→ アラート発動「したい」※でも現状アラート発動しない。

③その他(仮にDとEとFとGとHとIとJとKとします)のみ →アラート発動しない。

④AorBorCの中で複数選択した場合 → アラート発動「したい」※でも現状アラート発動しない。

※↑のコメントも修正しました。

完全に理解できていないのですが、選択にA、B、Cが含まれていたらアラートを表示するようにしました(そのように理解しました)。

badchoicesの中身を書き換えてください。

(function () {
'use strict';
kintone.events.on('app.record.detail.show', function (event) {
  const tableRecords = event.record.申請内容.value;
  const badchoices = ['sample1', 'sample2', 'sample3'];
  for (const row of tableRecords) {
    const choices = row.value['種類'].value;
    const result = choices.filter((choice) => badchoices.includes(choice));
    if (result.length) {
      window.alert('この内容がアラート表示される');
    }
  }
  return event;
});
})();

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。