2つのチェックボックスを連動させたい

〇ループせずに下記の仕様を組み込むことは可能でしょうか。
ーーーーー
「コピー」フィールド(Type:CHECK BOX)にチェックが入ったら
同じ行の「コピー_2」フィールド(Type:CHECK BOX)にチェックを入れ
行をコピーし、次の行に追加する。
また、「コピー_2」フィールド(Type:CHECK BOX)にチェックが入ったら
同じ行の「コピー」フィールド(Type:CHECK BOX)にチェックを入れ
行をコピーし、次の行に追加する。

〇下記の論理でコードを作成してみましたが、ループしてしまいます。
ーーーーー
「コピー_2」フィールドにチェックを入れた際に
「コピー」フィールドにチェックが入っていれば、何もしない
「コピー」フィールドにチェックが入っていなければ、チェックを入れる
⇒「コピー」フィールドにチェックが入ることで前行をコピーした行が追加される

「コピー」フィールドにチェックを入れた際に
⇒「コピー」フィールドにチェックが入ることで前行をコピーした行が追加される
「コピー_2」フィールドにチェックが入っていれば、何もしない
「コピー_2」フィールドにチェックが入っていなければ、チェックを入れる。

〇コードを記載致します。
ーーーーー
コード①

(function () {
    "use strict";
    const table = '運行記録TBL';
    const changeRowIndex = (event) => {
        let record = event.record;
        for (let i = 0; i < record[table].value.length; i++) {
            if (event.changes.row === record[table].value[i]) return i;
        }
        return (record[table].value.length - 1);
    }
    const events = [
        'app.record.create.change.コピー',
        'app.record.edit.change.コピー',
    ];

    kintone.events.on(events, function(event) {
        const record = event.record;
        let rowIndex = changeRowIndex(event);

        let gyosu = Number(event.record[table].value.length-1);
        if (record[table].value[gyosu].value.コピー_2.value !== ['✓']) {
            record[table].value[gyosu].value.コピー_2.value = ['✓']
        } else if (record[table].value[gyosu].value.コピー_2.value == ['✓']) {
                ;
            };  

        if (event.changes.field.value.length !== 0) {   
            event.changes.row.value.コピー.value = ['✓'];  
            const originData = JSON.parse(JSON.stringify(event.changes.row.value));  //コピー元のデータを一度文字列に変換する
            Object.keys(originData).forEach((code) => {  //値がない場合はvalue情報を空文字で作成
                if(!originData[code].value){
                    originData[code].value = "";
                }
            });
            const addRowData = { "value": originData };  //コピーを挿入するテーブル行のデータを作成
            //以下、コピー後に値を空にする
            addRowData.value.コピー.value = [];
            addRowData.value.品種.value = "";
            addRowData.value.品名ルックアップ.value = "";

            var newRow = event.record[table]['value'].push(addRowData);  //指定された行のデータをeventオブジェクトの既存テーブル最下行に挿入
            
            setTimeout(() => {
                jQuery('.gaia-ui-decimal-input-input input').attr('type', 'number');
              }, 0);
            
            return event;           
        }
        return event;
    });
})();

コード②

(() => {
    'use strict';
    let table = '運行記録TBL';

    kintone.events.on(
        ['app.record.create.change.コピー_2',
         'app.record.edit.change.コピー_2'
        ], event => {
        let record = event.record;
        let gyosu = Number(event.record[table].value.length)-1

            if (record[table].value[gyosu].value.コピー.value !== ['✓']) {
                record[table].value[gyosu].value.コピー.value = ['✓']
            } else if (record[table].value[gyosu].value.コピー.value == ['✓']) {
                ;
            };            
            return event;
        }
    );
})();

こんにちは。プロジェクト・アスノートの松田です。

テーブル行コピー機能を作るときの考え方について、初心者向けに解説した記事です。
参考になれば幸いです。

「いいね!」 2

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