新規投稿
フォローする

変数を利用したイベントリスナーの作成

プログラミングの初心者です。

KINTONEでチェックボックスを複数利用して自動計算をしようとしています。

その際、それぞれのチェックボックスのイベントリスナーをfor文で回してつくろうとしているのですが、うまく行きません。

for文を利用してイベントリスナーを作ることはできるのか、もしできるならどのようにすればよいのか教えていただけませんでしょうか。

よろしくお願いいたします。

0

5件のコメント

Avatar
Ryu Yamashita

倉田実さん

イベントリスナーの作成とのことでチェック済みかもしれませんが、

「○○画面のフィールド値変更イベントhttps://cybozudev.zendesk.com/hc/ja/articles/201941984#step3

がチェックボックスに対応していますので、これを駆使することで凌げないような状況であれば、作成が必要かと思います。

イベントリスナーの作成については、状態監視が必要になりますので、for文というよりsetTimeout等による処理が必要になってくるかと思います。似たようなトピックがありましたので、ご参考になればと思いますが、いかがでしょうか?

https://cybozudev.zendesk.com/hc/communities/public/questions/200848230
https://cybozudev.zendesk.com/hc/communities/public/questions/201074074
https://cybozudev.zendesk.com/hc/communities/public/questions/201249964

やはり色合いが違ったりですとか、ご不明な点があれば、また書き込み頂ければと思います。

0
Avatar
test

早速の回答有難うございます。

イベントリスナーの作成というよりか登録の仕方の問題みたいなので
より具体的に質問してみます。

現在、以下の様なものを作ってみています。
これでチェックボックス1(chk1)が変更になった時に、値1(val1)を変更するということはできます。

ところがチェックボックス2(chk2)が変更になった時に値2(val2)が変更になるということを同時に実現することができません。

複数のフィールド値変更イベントを登録するにはどのようにしたら良いのでしょうか。
引き続きよろしくお願いいたします。

//チェックボックスのイベントを取得

i=1

var s1='app.record.create.change.chk'+i
var s2='app.record.edit.change.chk'+i

var events1 = [s1,s2];
kintone.events.on(events1, function (event) {

var record = event['record'];

//チェックボックスの入力値チェック
if(record['chk'+i]['value'][0] == "@"){

  //チェックありの場合は1
  record['val'+i]['value'] = 1;
}else{

  //チェックなしの場合は0
  record['val'+i]['value'] = 0;
}
return event;

});

0
Avatar
Ryu Yamashita

ありがとうございます。想像力不足でした。簡単に実現するには次のような記述で想定の動きをしてくれるのではないかと思います。

(function () {
"use strict";

for(var i=1; i <length; i++){
    (function(){
        var j=i ;
        kintone.events.on(['app.record.create.change.chk'+j, 'app.record.edit.change.chk'+j], function(event){
            var record = event['record'];
            //チェックボックスの入力値チェック
            if(record['chk'+j]['value'][0] == "@"){
                //チェックありの場合は1
                record['val'+j]['value'] = 1;
            }else{
                //チェックなしの場合は0
                record['val'+j]['value'] = 0;
            }
            return event;
        });
    })();
}

})();

JavaScriptの変数の宣言・ブロックの仕様でそのままですとiの値は常に一定値をとっていたのではないかと思いますが、即時関数で括ると値を取り出し直すことが出来ます。

0
Avatar
test

ご回答ありがとうございました。
示して頂いたコードを利用して想定していた動きをするカスタマイズができました。

お礼が遅れて申し訳ありませんでした。

0
Avatar
Ryu Yamashita

倉田さん

ご丁寧にありがとうございます。無事実現されたようで何よりです(^^)

0
サインインしてコメントを残してください。