回答の条件によって別フィールドの表示/非表示を切り替える

お世話になります。

のように、その他を選んだ場合、その他が表示になるようにしたいですが、

なかなかうまくいかず、アドバイス頂きたく投稿させて頂きました。

(function() {
“use strict”;

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

kintone.events.on(events, function(event) {

var record = event.record;

//1問目になにも選択されていなかった場合は「その他」フィールドを表示しない
var past = record[‘past’][‘value’];
if (past.length=== 0) {
kintone.app.record.setFieldShown(‘other’, false);
}

//1問目で「その他」が選択された場合は「その他」フィールドを表示する
for (var i = 0; i < past.length; i++) {
if (past[i] === ‘その他’) {
kintone.app.record.setFieldShown(‘other’, true);
}else {
kintone.app.record.setFieldShown(‘other’, false);
}

}
});
})();

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

 

goro さん

「コース(past)」はドロップダウンフィールドのため、record[‘past’][‘value’] の値は配列にはなりません。

よって、

if (past.length=== 0)

の部分は

if (!past)

とし、for ループで判定されている部分も for で回さずに

if (past === 'その他')

とすれば期待する結果が得られるのではないかと思われます。

 

if (!past) の表記については下記のナレッジが参考になるかと思います。

https://developer.cybozu.io/hc/ja/community/posts/115017919303

Shinichi Suenaga 様

お世話になっております。

早速アドバイスいただき、本当にありがとうございます。

基本知識が不足で大変恐縮です。

以下アドバイス頂いたように、書いてみました。** ただ、record[‘other’][‘value’] = false;//←非表示の時にvalueを空にするのがまだうまく反映されない状態ですが、大変申しわけございませんが、再度アドバイス頂けたら幸いです。**

(function() {
“use strict”;

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

kintone.events.on(events, function(event) {

var record = event.record;

//1問目になにも選択されていなかった場合は「その他」フィールドを表示しない
var past = record[‘past’][‘value’];
if (!past) {
kintone.app.record.setFieldShown(‘other’, false);
record[‘other’][‘value’] = false;//←非表示の時にvalueを空にする
}

//1問目で「その他」が選択された場合は「その他」フィールドを表示する

if (past === ‘その他’) {
kintone.app.record.setFieldShown(‘other’, true);
}else {
kintone.app.record.setFieldShown(‘other’, false);
}

});
})();

goro さん

チェックボックスのフィールドの value は配列になりますので、

以下のように空の配列を代入すればすべてのチェックが外れるかと思います。

record['other']['value'] = [];

Shinichi Suenaga 様

お世話になっております。

早速アドバイスいただき、本当にありがとうございます。

record['other']['value'] = [];

にしてもチェックが外れませんでした・・・

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

goro さん

大事な部分を見落としていました。

kintone.events.on の引数となっている関数の最後に「return event;」の一文を加えてみてください。

Shinichi Suenaga 様

お世話になっております。

何度も何度も対応していただき、本当に感謝しております。

以下のようにしましたが、チェックが外れませんでした・・・

(function() {
“use strict”;

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

kintone.events.on(events, function(event) {

var record = event.record;

//1問目になにも選択されていなかった場合は「その他」フィールドを表示しない
var past = record[‘past’][‘value’];
if (!past) {
kintone.app.record.setFieldShown(‘other’, false);
record[‘other’][‘value’] = [];//←非表示の時にvalueを空にする
}

//1問目で「その他」が選択された場合は「その他」フィールドを表示する

if (past === ‘その他’) {
kintone.app.record.setFieldShown(‘other’, true);
}else {
kintone.app.record.setFieldShown(‘other’, false);
}

return event;
});

})();

Shinichi Suenaga 様

お世話になっております。

何度も何度も対応していただき、本当にありがとうございます。

以下のように、

//1問目になにも選択されていなかった場合は「その他」フィールドを表示しない
var past = record[‘past’][‘value’];
if (!past) {
kintone.app.record.setFieldShown(‘other’, false);
record[‘other’][‘value’] = [];//←非表示の時にvalueを空にする
}

//1問目で「その他」が選択された場合は「その他」フィールドを表示する

if (past === ‘その他’) {
kintone.app.record.setFieldShown(‘other’, true);
}else {
kintone.app.record.setFieldShown(‘other’, false);
record[‘other’][‘value’] = [];//←非表示の時にvalueを空にする
}

return event;
});

二箇所、record[‘other’][‘value’] = [];//←非表示の時にvalueを空にする をいれたら、

今はやっと消えるようになりました。

念のために、こんな設定で問題ないか、最後に確認していただけると幸いです。

本当に、いっぱい教わっていただき、ありがとうございました。

 

(function() {
“use strict”;

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

kintone.events.on(events, function(event) {

var record = event.record;

//1問目になにも選択されていなかった場合は「その他」フィールドを表示しない
var past = record[‘past’][‘value’];
if (!past) {
kintone.app.record.setFieldShown(‘other’, false);
record[‘other’][‘value’] = [];//←非表示の時にvalueを空にする
}

//1問目で「その他」が選択された場合は「その他」フィールドを表示する

if (past === ‘その他’) {
kintone.app.record.setFieldShown(‘other’, true);
}else {
kintone.app.record.setFieldShown(‘other’, false);
record[‘other’][‘value’] = [];//←非表示の時にvalueを空にする
}

return event;
});

})();