モーダルウィンドウをクリックすると無効になるイベントがある

お世話になっております。

 

テーブルのなかにボタンを設置し、

ボタンをクリックするとモーダルウィンドウが表示されるのですが、

モーダルウィンドウをクリックすると、

下記、処理が行われなくなります。

デバッグしても処理を通らなかったので、イベントが無効になっている??

// 新規作成時、バーコード、ピックアップ、レジ袋、配達情報以外のメモ 非表示
(function () {
    "use strict";
    kintone.events.on(['app.record.create.show','app.record.create.change.order_items'], function (event) {
      // バーコード
        $('table:eq(2) thead tr th:eq(12)').hide();
        $('table:eq(2) tbody tr td:nth-child(13)').hide();
      //ピックアップラジオボタン
        $('table:eq(2) thead tr th:eq(4)').hide();
        $('table:eq(2) tbody tr td:nth-child(5)').hide();
        // レジ袋
        kintone.app.record.setFieldShown('bagM', false);
        kintone.app.record.setFieldShown('bagL', false);
        kintone.app.record.setFieldShown('bagPrice', false);
        $('#user-js-bagSpace').parent('div').hide();
        // 配達情報以外のメモ
        kintone.app.record.setFieldShown('リッチエディター_1', false);
        kintone.app.record.setFieldShown('memoPay', false);
    });
})();

モーダルウィンドウのコードについては下記のとおりです。

テーブルに文字列フィールドをボタンに変換しました。

ボタンをクリックすると、モーダルウィンドウが表示します。

モーダルウィンドウの中身は他アプリの在庫データになります。

kintone.events.on([

    'app.record.create.change.jan', 'app.record.edit.change.jan'

], (event) => {

    const sp = document.getElementsByClassName("field-5525974");

    const hide = document.getElementsByClassName("value-5525974");

    let record = event.record

    record['order_items'].value.forEach((row, index) => {

        let jan = row.value['jan'].value;

        let buttonId = 'zaikoBtn' + jan;

        let removeBtnID = sp[index].lastElementChild.id;

        let removeButton = document.getElementById(removeBtnID);

        if (removeButton) sp[index].removeChild(removeButton);

        if (jan) {

            let btn = document.createElement('button');

            btn.id = buttonId;

            btn.className = 'jan-button';

            btn.textContent = '開く';

            btn.onclick = () => {

                showJan(jan);

            };

            sp[index].appendChild(btn);

            hide[index].style.display = 'none';

        }

    });

    $('.jan-button').hover(() => {

        $(this).css({

            color: '#ECECEC',

            background: '#3498DB'

        });

    });

    return event;

});

function showJan(jan) {

    let getRecords = {

        app: 398,

        query: 'code = \"' + jan + '\" order by deliStore asc'

    };

    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', getRecords, (resp) => {

        let CDs = {

            CD102: '-',

            CD103: '-'

        };

        resp.records.forEach((record) => {

            let deliStoreCD = record['deliStore'].value, zaiko = record['zaiko'].value;

            let deliStore = "CD"+deliStoreCD;

            if (CDs[deliStore]) CDs[deliStore] = zaiko;

        });

        let headerSpace = kintone.app.record.getHeaderMenuSpaceElement();

        headerSpace.innerHTML = '<div id="dialog_content_1" class="dialog_content" style="display:none;">' +

            '<div class="dialogModal_header">JAN:' + jan + '</div>' +

            '<div class="dialogModal_content">' +

            '<table border="1px">' +

            '<tr><td>店舗</td><td>在庫数</td></tr>' +

            '<tr><td>102 XX</td><td>' + CDs.CD102 + '</td></tr>' +

            '<tr><td>103 XX</td><td>' + CDs.CD103 + '</td></tr>' +

            '</table></br>' +

            '</div>' +

            '<div class="dialogModal_footer">' +

            '<button class="btn btn-default" data-dialogmodal-but="cancel" type="button">Cancel</button>' +

            '</div>' +

            '</div>';

        $('.dialog_content').dialogModal({

            topOffset: 0,

            top: '10%',

        });

    }, (error) => {

        console.error(error);

    });

};

原因をご教授いただければ幸いです。

 

関石さん

こんにちは。

 

上の方のコードが反映されないということでしょうか。

「新規作成時、バーコード、ピックアップ、レジ袋、配達情報以外のメモ 非表示」

 

‘app.record.create.show’ イベントで処理されており

新規作成画面が開いたタイミングで全て非表示になるため

その後のテーブル変更やモーダル表示とは関係ない気がします。

 

新規作成画面が開いたときに非表示にならないということでしたら別の原因を探ります。

koichi さま

ご回答ありがとうございました。

‘app.record.create.show’ イベントでは項目非表示となりますが、

ボタンをクリックすると、テーブルに行を追加しても('app.record.create.change.order_itemsイベント)項目が非表示にならず、

ボタンをクリックしなければ行を追加しても項目が非表示になります。

 

以上、よろしくお願いいたします。

すみません、動作を見落としていました。おっしゃる通りですね。

モーダル内にtable要素が生じるので、それが0番目としてカウントされています。

そのため、モーダル発生後は「table:eq(3)」になります。

 

制御方法は色々あります。

・モーダルを閉じる度にモーダル要素を削除する(毎回新規作成)

・table要素の個数(length)でeqの引数を変える

・$(table:eq(2))での取得ではなく、table要素の個数に依存しない方法でサブテーブルを取得する

koichiさま

 

ご教授いただきありがとうございました。

・$(table:eq(2))での取得ではなく、table要素の個数に依存しない方法でサブテーブルを取得する

上記より、setFieldShownを用いてテーブル項目を非表示することができました。

(サブテーブルもsetFieldShownを用いて非表示できることが確認不足でした…)

モーダルウィンドウも正常に動作できました。

ありがとうございました。

以上、よろしくお願いします。