チェックボックスにクリックでチェック(OnとOff)した場合の 動作について

チェックボックスにクリックでチェック(OnとOff)した場合の
動作について質問があります。

■実現したいこと
(1)チェックをすると、定義したフィールドが表示される。
→こちらは動いております。

(2)チェックを外すと、定義したフィールドが非表示になる
それに加え、フィールド内の値を”なし”または空白に設定する
→フィールドの非表示は実現できましたが、
再度クリックしても、以前にフィールド内に設定した値が
そのまま保持されております。

■画面イメージ

[作業内容]チェックボックスがあります。
クリーニング
その他

クリーニングにチェックを入れると、”クリーニング【床】”のボックスが
表示され、ラジオボタンで 「なし」「一部」「全部」を選択できます。
こちらの初期値は「なし」です。
また、その他にチェックを入れると、”その他”のテキストボックスが表示されます。
こちらの初期値は空白(null)です。

実際のスクリプトは以下となります。ChromeのF12のconsole上では
何もエラーは表示されません。
不備があるかご教授願います。

//----------レコードの追加、編集、詳細画面で適用する-----------------------------
var events = [‘app.record.detail.show’,
‘app.record.create.show’,
‘app.record.create.change.workType’,
‘app.record.create.change.cleanFloor’,
‘app.record.edit.show’,
‘app.record.edit.change.workType’,
‘app.record.edit.change.cleanFloor’];

//----------”チェック”(選択した場合)にフィールドを表示
//----------チェックボックスを外すと、ラジオボタンやテキストフィールドの値を消去する

kintone.events.on(events, function(event) {
var record = event.record;

var workType = record[‘workType’][‘value’];
if (workType.indexOf(‘クリーニング’) >= null) {
kintone.app.record.setFieldShown(‘cleanFloor’, true);
} else {
kintone.app.record.setFieldShown(‘cleanFloor’, false);
event.record.cleanCeiling[‘value’] = “なし”;
}

if (workType.indexOf(‘その他’) >= 0) {
kintone.app.record.setFieldShown(‘workTypeEtc’, true);
} else {
kintone.app.record.setFieldShown(‘workTypeEtc’, false);
event.record.workTypeEtc[‘value’] = “なし”;
}
});

 

「workTypeEtc」は”「"その他”のテキストボックス」ということで良いですか?

また「cleanCeiling」というフィールドコードが何かわかりませんでしたが、「cleanFloor」の間違いでしょうか?

events.on内で編集したレコードは最後にeventをreturnしないとレコードに反映されないかと思います。(https://developer.cybozu.io/hc/ja/articles/201941964#step6

以下のようなコードで試したところ問題なく動いているようにみえました。

  1. (function(){
  2.     ‘use strict’;
  3.     //----------レコードの追加、編集、詳細画面で適用する-----------------------------
  4.     var events = [‘app.record.detail.show’,
  5.         ‘app.record.create.show’,
  6.         ‘app.record.create.change.workType’,
  7.         ‘app.record.create.change.cleanFloor’,
  8.         ‘app.record.edit.show’,
  9.         ‘app.record.edit.change.workType’,
  10.         ‘app.record.edit.change.cleanFloor’
  11.     ];
  12.     //----------”チェック”(選択した場合)にフィールドを表示
  13.     //----------チェックボックスを外すと、ラジオボタンやテキストフィールドの値を消去する
  14.     kintone.events.on(events, function(event) {
  15.         var record = event.record;
  16.         var workType = record[‘workType’][‘value’];
  17.         if (workType.indexOf(‘クリーニング’) >= 0) {
  18.             kintone.app.record.setFieldShown(‘cleanFloor’, true);
  19.         } else {
  20.             kintone.app.record.setFieldShown(‘cleanFloor’, false);
  21.             event.record.cleanFloor[‘value’] = “なし”;
  22.         }
  23.         if (workType.indexOf(‘その他’) >= 0) {
  24.             kintone.app.record.setFieldShown(‘workTypeEtc’, true);
  25.         } else {
  26.             kintone.app.record.setFieldShown(‘workTypeEtc’, false);
  27.             event.record.workTypeEtc[‘value’] = “”;
  28.         }
  29.         return event;
  30.     });
  31. })();

cookie さん

 

コメントありがとうございます。

ご指摘の通り、 return event;  を追記したところ

思った通りの動作を行いました。

また、

>「cleanCeiling」というフィールドコードが何かわかりませんでしたが、「cleanFloor」の間違いでしょうか?

はい、おっしゃる通りです。

床のほかにも天井、壁などの要素に対しても

作りこみを行っていたので、質問する際に割愛した場所が

誤っておりました。

 

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