新規投稿
フォローする

チェックボックスの選択肢によってフィールドの表示/非表示を切り替えたい

初めて質問させてもらいます。

初心者なので、普通なら分かる内容で悩んでいるのかもしれませんが

アドバイスいただけると幸いです!

 

★チェックボックスの選択肢によって

他のフィールドの表示・非表示を切り替えたいです。

https://cybozudev.zendesk.com/hc/ja/articles/202377614-%E5%9B%9E%E7%AD%94%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E5%88%A5%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E8%A1%A8%E7%A4%BA-%E9%9D%9E%E8%A1%A8%E7%A4%BA%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B

を参考に、ラジオボタン・複数選択での動作はできるようになったのですが…

チェックボックスの場合どうすればよいのか全く分からない状況です。

添付画像の様なフィールドを配置しており、

・タスクAに✔が入れば「タスクA」のグループを表示

・タスクBに✔が入れば「タスクB」のグループを表示

・タスクAとタスクBに✔が入れば「タスクA」のグループと「タスクB」のグループを表示

という様に、表示非表示を切り替えたいです。

 

下記内容でタスクAは動くのですが、

タスクB~タスクF分をどう表記すればいいのか・・・

色々試してはましたが、思ったように動いてくれません。

どなたか、良い方法がありましたら教えていただけると助かります。

よろしくお願いします。

*****************************

//「タスク表示」でなにも選択されていなかった場合は「タスクA」「タスクB」「タスクC」「タスクD」「タスクE」「タスクF」フィールドを表示しない
var タスク表示 = record['タスク表示']['value'];
if (タスク表示.length === 0) {
kintone.app.record.setFieldShown('タスクA', false);
kintone.app.record.setFieldShown('タスクB', false);
kintone.app.record.setFieldShown('タスクC', false);
kintone.app.record.setFieldShown('タスクD', false);
kintone.app.record.setFieldShown('タスクE', false);
kintone.app.record.setFieldShown('タスクF', false);
}

//「タスク表示」で「タスク」が選択された場合は「タスクA」フィールドを表示する
for (var ii = 0; ii < タスク表示.length; ii++) {
if (タスク表示[i] === 'タスクA') {
kintone.app.record.setFieldShown('タスクA', true);
}else {
kintone.app.record.setFieldShown('タスクA', false);
}

}

0

8件のコメント

Avatar
武井 琢治

cstap武井です。

ラジオボタンでできたのであれば、もうすぐできると思います。

引っかかっているのはラジオボタンとチェックボックスとで、

値の形式が異なるからだと思われます。

 

形式について詳しくはこちらの記事を御覧ください。

 

具体的に言うと、チェックボックスは配列になっていますので、

var タスク表示 = record['タスク表示']['value'];が

var タスク表示 = record['タスク表示'][n]['value'];に変わるなどするでしょう。

1
Avatar
武井 琢治

すみません脊髄反射でレスしてしまいました!

上記は無視してください!

 

この場合、changeイベントを使ってみてください!

参考URLは下記となります。

https://cybozudev.zendesk.com/hc/ja/articles/202166270-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E7%B7%A8%E9%9B%86%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88#step3

 

チェックされる度にタスクAのような判定を入れればよろしかろうと思います。

0
Avatar
岡田美緒

ありがとうございます!
試してみます!

分からなければまた質問させてくださいm(_ _)m

0
Avatar
武井 琢治

五月雨ですみません。

参考URLよく読んでいませんでしたが、

参考URLのchangeイベントのやり方が今回の岡田さんのやり方と沿わないと思います。

 

私なら、

kintone.events.on('app.record.edit.change.タスクA', function(event) {

kintone.events.on('app.record.edit.change.タスクB'function(event) {

kintone.events.on('app.record.edit.change.タスクC'function(event) {

のようにそれぞれに指定してしまいますね。

0
Avatar
武井 琢治

岡田さん

すみません、私事ながら少々混乱していました!!

 

冷静になって、私の環境で動作した完全回答を差し上げます。

(下記、タスクA・B・Cのみの場合です)

kintone.events.on(['app.record.edit.change.タスク表示', 'app.record.create.change.タスク表示'], function (event) {
var record = event.record;
kintone.app.record.setFieldShown('タスクA', false);
kintone.app.record.setFieldShown('タスクB', false);
kintone.app.record.setFieldShown('タスクC', false);
for (var i = 0; i < record.タスク表示.value.length; i++) {
kintone.app.record.setFieldShown(record.タスク表示.value[i], true);
}
});
0
Avatar
岡田美緒

武井様

ありがとうございます!

ご回答頂いたもので、動作確認できました!

大変助かりました!本当にありがとうございます(^^)/

0
Avatar
岡田美緒

武井様

実は、新たな問題が発生しまして…

編集画面での表示非表示は上記内容で解決したのですが、

チェックボックスの値を変更し、保存すると詳細画面ではすべてのものが表示されっぱなしになってしまいます(^-^;

詳細画面の場合は非表示にすることはできないのでしょうか?

//「タスク表示」でなにも選択されていなかった場合は「タスクA」「タスクB」「タスクC」「タスクD」「タスクE」「タスクF」フィールドを表示しない
var タスク表示 = record.タスク表示.value;
if (タスク表示.length === 0) {
kintone.app.record.setFieldShown('タスクA', false);
kintone.app.record.setFieldShown('タスクB', false);
kintone.app.record.setFieldShown('タスクC', false);
kintone.app.record.setFieldShown('タスクD', false);
kintone.app.record.setFieldShown('タスクE', false);
kintone.app.record.setFieldShown('タスクF', false);
}

//「タスク表示」の値を変更したときに発生
kintone.events.on(
['app.record.detail.show',
'app.record.edit.change.タスク表示',
'app.record.create.change.タスク表示'], function (event) {
var record = event.record;
kintone.app.record.setFieldShown('タスクA', false);
kintone.app.record.setFieldShown('タスクB', false);
kintone.app.record.setFieldShown('タスクC', false);
kintone.app.record.setFieldShown('タスクD', false);
kintone.app.record.setFieldShown('タスクE', false);
kintone.app.record.setFieldShown('タスクF', false);

for (var i = 0; i < record.タスク表示.value.length; i++) {
kintone.app.record.setFieldShown(record.タスク表示.value[i], true);
}
});
'app.record.detail.show'

⇑これを追加しても変化がなく・・・

 

もしいらっしゃいましたら、ご回答いただけると幸いです。

宜しくお願い致します。

 

0
Avatar
武井 琢治

私が見たところ、詳細画面でも消えていますが。

他の処理でJSが落ちてしまっているか、

すべてのイベントできちんとreturn event;していない辺りが原因でしょう。

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