下記のような処理を組んでいます
- サブテーブル内のチェックボックスがクリックされた際changeイベントを発火
- 同一行のフィールドAへ値をセット
- ファイルチューザーを起動
- ファイル選択完了後に同一行の文字列フィールドBに値をセットする
コードは下記の通りです。
kintone.events.on(changeEvents, function(event){
〜フィールドAへのセット処理〜
binding(X, Y);
return event;
});
function binding(X, Y){
〜ファイルチューザー用のinputタグ(id=st_inputImage)埋め込み〜
$('#st_inputImage').on('change', function(e){
〜選択されたファイルに関する処理〜
setResult(X, Y)
});
$('#st_inputImage').trigger('click'); //ファイルチューザー起動
}
function setResult(X, Y){
let recordWrap = kintone.app.record.get();
let record = recordWrap.record;
record[サブテーブル名].value.forEach(row=>{
if(row.value[フィールドX].value === Y){
row.value[フィールドB].value = '値';
}
});
kintone.app.record.set(recordWrap);
}
Chrome, firefox, safari, edgeでは問題なく動作しますが、IE11でのみファイル選択後のタイミングで「You cannot call kintone.app.record.get() in handler or during processing a handler」が発生します。
どなたか解決策ご存知でしたらご教示頂けますと幸いです。
よろしくお願いいたします。
IE では、アロー関数が未サポートです。
ただアロー関数のエラーは、構文エラーになるので、kintone.app.record.get(); がエラーになる原因は分かりません。
とりあえず、アロー関数を無名関数に書き直してみてはいかがですか?
rex0220様
ご返信ありがとうございます。
説明不足で申し訳ありません、実際には上記コードをbabel変換し実行しております。
アロー関数が問題ないとすると、kintone.app.record.get(); の実行タイミングですか。
よくある kintone.app.record.get(); のエラーとしては、kintone イベント処理中に実行されたときですね。
$(‘#st_inputImage’).trigger(‘click’); で、起動されたときに、イベント処理中だとエラーになるのか?ブラウザーによって挙動が異なるのか?
試しに、kintone.app.record.get(); とreturn event; にデバッガーでブレークポイントを設定して、どちらが先に動くか確認してみてください。
ご返信ありがとうございます。
>試しに、kintone.app.record.get(); とreturn event; にデバッガーでブレークポイントを設定して、どちらが先に動くか確認してみてください。
確認してみました。
Chrome:
- $(‘#st_inputImage’).trigger(‘click’)
- チューザー起動(このときにretuen eventの実行待ち)
- ファイル選択
- return event
- kintone.app.record.get()
IE11:
- $(‘#st_inputImage’).trigger(‘click’)
- チューザー起動
- ファイル選択
- kintone.app.record.get()
- return event
ブラウザによってJavascriptの処理順序が変わるのですね、、
根本解決には至っておりませんが、引き続き試行錯誤してみます。
やっぱり、実行順序が異なるんですね。
暫定対応としては、setTimeout で少しkintone.app.record.get() を遅らせてやればいかがですか?
setTimeoutを使用するか、IE11ではそもそも使用できないようにしようと思います。
ご丁寧にありがとうございました。