複数選択で選択した項目ごとに別のフィールドコードの表示を制御したい

何を実現したいのかを書きましょう

複数選択に A,B,Cの項目を設定
Aを選択した場合は、Aに関するテキストボックスを表示
Bを選択した場合は、Bに関するテキストボックスを表示という制御を行いたいです。
Bを選択した後、Bの選択を外した場合は、Bに関するテキストボックスを非表示にしたい。

発生した問題やエラーメッセージを具体的に書きましょう

選択したときにテキストボックスを表示させることはできましたが、
選択を外した場合に、テキストボックスを非表示にする方法が思い浮かびません。
選択肢のn番目の選択状態がOnなのかOffなのかを取得することは
出来ますか?
方法や案をご教授いただきたいです。よろしくお願いいたします。

実行したコードをコピー&ペーストしましょう

/*
新規作成
*/
(() => {
    'use strict';

    const events1 = [
        'app.record.create.show'
    ];

    kintone.events.on(events1, (event) => {
        const record = event.record;

        //初期設定
        motouke('Off');           
        rdo_Motouke('Off');
        shisetu('Off');       
        return event;
    })
})();


(() => {
    'use strict';

    const events = [
        'app.record.edit.show',
        'app.record.edit.change',
        'app.record.create.change.MultiSelectItem',
        'app.record.edit.change.MultiSelectItem',
    ];

    kintone.events.on(events, (event) => {
        const record = event.record;

        var selectItem = record.MultiSelectItem.value;

        for (var i = 0; i < selectItem.length; i++) {
            switch (selectItem[i]) {
                case '施設':
                    shisetu('On')
                    break;

                case '元請名':
                    motouke('On')
                    break;

                case '元請区分':
                    rdo_Motouke('On')
                    break;
            }
        };
            return event;
    });
})();


function motouke(criteria) {
    if (criteria == 'On') {
        kintone.app.record.setFieldShown('Txt_元請名', true);
    } else {
        kintone.app.record.setFieldShown('Txt_元請名', false);
    }
    return;
};

function rdo_Motouke(criteria) {
    if (criteria == 'On') {
        kintone.app.record.setFieldShown('rdo_Motouke', true);
    } else {
        kintone.app.record.setFieldShown('rdo_Motouke', false);
    }
    return;
}

function shisetu(criteria) {
    if (criteria == 'On') {
        kintone.app.record.setFieldShown('Txt_施設_番号', true);
        kintone.app.record.setFieldShown('Txt_施設_カナ', true);
        kintone.app.record.setFieldShown('Txt_施設_名称', true);
        kintone.app.record.setFieldShown('Txt_施設_所有者名', true);

    } else {
        kintone.app.record.setFieldShown('Txt_施設_番号', false);
        kintone.app.record.setFieldShown('Txt_施設_カナ', false);
        kintone.app.record.setFieldShown('Txt_施設_名称', false);
        kintone.app.record.setFieldShown('Txt_施設_所有者名', false);
    }
    return;
};

発想を逆転させて、

  • before: MultiSelectItem で選択された分だけループする
  • after: MultiSelectItem に設定されている項目の分だけループする(固定の数)
    とすれば楽にできそうですがどうでしょうか。

たとえば、提示されたコードのように, 施設 元請名 元請区分 の3つが設定されているのであれば、毎回それが選択されているかみればいいとおもいます。

下記は愚直にifで書く場合です

// 配列.includesでそれが含まれているか確認できる
if (selectItem.includes('元請名')) {
  kintone.app.record.setFieldShown('Txt_元請名', true);
  // motouke関数を使うでもOK
} else {
  kintone.app.record.setFieldShown('Txt_元請名', false);
}
// 以下施設や元請け区分の分もつくる

mura

ありがとうございます。
『includes』使ってみます。

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