チェックボックス該当項目のエラー表示&リセットについて

いつもお世話になっております。

チェックボックス:sample2 を選んだら、「備考」が必須項目になるように設定したいですが、なんだか、以下の2通り設定してみましたが、どっちも実現できなくて・・・

①sample2 を選んだら、「備考」が必須項目になりますが、チェックを外しても「備考」の値はリセットされない・・・

(function () {
"use strict";
varevents = [
'app.record.detail.show','app.record.create.show','app.record.edit.show',
'app.record.index.edit.submit','app.record.index.edit.show',
'app.record.index.edit.change.チェックボックス','app.record.create.change.チェックボックス','app.record.edit.change.チェックボックス',
];
kintone.events.on(events,function(event) {
varrecord = event.record;
varcheck = record['チェックボックス']['value'];

if(check.indexOf('sample2') !=-1) {
kintone.app.record.setFieldShown('備考',true);
record['備考']['disabled'] =false;

}else{
kintone.app.record.setFieldShown('備考',false);
record.備考.value ="";//非選択時リセット
record['備考']['disabled'] =true;//非選択時入力不可
}

returnevent;
});
// エラーを表示する処理
varevents2 = [
"app.record.index.edit.submit","app.record.create.submit","app.record.edit.submit",
 "app.record.edit.show","app.record.create.show","app.record.index.edit.show","app.record.detail.show",
"app.record.edit.change.チェックボックス","app.record.create.change.チェックボックス","app.record.index.edit.change.チェックボックス",
];
kintone.events.on(events2,function(event) {
varrecord = event.record;
varcheckVa1 = record["チェックボックス"].value;
// 選択肢により必須表示

if( !record["備考"].value ){
record["備考"].error ="必須項目!";
}
else{
record["備考"].error =null;
}

returnevent;
});

})();

 

sample2 を選んだら、「備考」が必須項目になりますが、「備考」が編集不可になってしまう・・・

「備考」を編集不可にするのは:sample2を外したときのはずです。

どこが原因でしょうか?どなたかご指導いただけますでしょうか?どうぞよろしくお願い致します。

コード⇊

(function () { "use strict"; var events = ['app.record.detail.show','app.record.create.show','app.record.edit.show', 'app.record.index.edit.submit','app.record.index.edit.show', 'app.record.index.edit.change.チェックボックス','app.record.create.change.チェックボックス','app.record.edit.change.チェックボックス',]; kintone.events.on(events, function(event) { var record = event.record; var check = record['チェックボックス']['value']; if (check.indexOf('sample2') != -1) { kintone.app.record.setFieldShown('備考',true); record['備考']['disabled'] = false; if ( !record["備考"].value ){ record["備考"].error = "必須項目!"; } else{ record["備考"].error = null; } }else{ kintone.app.record.setFieldShown('備考',false); record.備考.value = "";//非選択時リセット record['備考']['disabled'] = true;//非選択時入力不可 } return event; }); })();

https://developer.cybozu.io/hc/ja/articles/202166270#step6

こちら見ていただくと分かるんですが、

>ハンドラーが record オブジェクトのフィールドの error にエラーメッセージを代入して event オブジェクトを return した場合、 フォームの値の書き換えと編集可/不可の設定はキャンセルされ、フィールドにエラーメッセージが表示されます。

 

と、書いてますので今回のコード(上のほう)で言いますと event.error = null と record.備考.value = “”;の部分が当てはまるのではと思います。

ですので、フォームの値を書き換えるときはエラーを返さないようにするしかないかと思います。

TK 様

いつも大変お世話になっております。

ずっとモヤモヤして、大変困っておりました。アドバイス頂き、本当にありがとうございます。

まだまだ知識不足で大変恐縮ではございますが、コードを以下にしてから、エラー出すのは難しいということでしょうか?どうすればよろしいでしょうか?お忙しいところ大変申し訳ございませんが、再度なにかアドバイス頂けたら幸いです。どうぞよろしくお願い致します。

(function () {
"use strict";
var events = [
'app.record.detail.show','app.record.create.show','app.record.edit.show',
'app.record.index.edit.submit','app.record.index.edit.show',
'app.record.index.edit.change.チェックボックス','app.record.create.change.チェックボックス','app.record.edit.change.チェックボックス',
];
kintone.events.on(events, function(event) {
var record = event.record;
var check = record['チェックボックス']['value'];

if (check.indexOf('sample2') != -1) {
kintone.app.record.setFieldShown('備考',true);
record['備考']['disabled'] = false;

}else{
kintone.app.record.setFieldShown('備考',false);
record.備考.value = "";//非選択時リセット
record['備考']['disabled'] = true;//非選択時入力不可
}

return event;
});


})();

チェックボックスのイベントでエラーを出して

備考のイベントでエラーを消す、みたいにすれば可能かと。

あとフィールドのdisabled は setFieldShownで消すなら不要かと思います。

(function() {
"use strict";
var events = [
"app.record.detail.show",
"app.record.create.show",
"app.record.edit.show",
"app.record.index.edit.submit",
"app.record.index.edit.show",
"app.record.index.edit.change.チェックボックス",
"app.record.create.change.チェックボックス",
"app.record.edit.change.チェックボックス"
];
kintone.events.on(events, function(event) {
var record = event.record;
var check = record["チェックボックス"]["value"];

if (check.indexOf("sample2") != -1) {
kintone.app.record.setFieldShown("備考", true);
// record["備考"]["disabled"] = false;
record.備考.error = "必須です";
} else {
kintone.app.record.setFieldShown("備考", false);
record.備考.value = ""; //非選択時リセット
// record["備考"]["disabled"] = true; //非選択時入力不可
}

return event;
});

kintone.events.on(["app.record.create.change.備考", "app.record.edit.change.備考"], function(event) {
var record = event.record;
if(record.備考.value) {
record.備考.error = null;
}

return event;
});
})();

TK 様

いつも大変お世話になっております。

お礼が遅くなって大変申し訳ございません。再度アドバイス頂き、誠にありがとうございます。

恐れ入りますが、、今一覧画面で編集する場合、sample2のチェックを外した場合⇒備考がエラーが出たままで、備考が入力不可にならず、sample1とsample3を選択し場合でも間違って備考に入力することが可能になってしまいます・・ユーザーには、sample2を選んだ場合のみ、備考を必須項目にし、入力漏れを防ぎたいですが、チェックボックスだと難しいでしょうか?

上記のコードのイベントにapp.record.index.edit.change.備考を追加したらどうなりますか?

TK 様

いつも大変お世話になっております。以下のコードで動きは変わらないです。変更ありませんでした・・

あと、今のコードでは備考が「必須です。」とエラーになりますが、未入力でも保存はできてしまいます・・・

(function() {
"use strict";
var events = [
"app.record.detail.show",
"app.record.create.show",
"app.record.edit.show",
"app.record.index.edit.submit",
"app.record.index.edit.show",
"app.record.index.edit.change.チェックボックス",
"app.record.create.change.チェックボックス",
"app.record.edit.change.チェックボックス"
];
kintone.events.on(events, function(event) {
var record = event.record;
var check = record["チェックボックス"]["value"];

if (check.indexOf("sample2") != -1) {
kintone.app.record.setFieldShown("備考", true);
// record["備考"]["disabled"] = false;
record.備考.error = "必須です";
} else {
kintone.app.record.setFieldShown("備考", false);
record.備考.value = ""; //非選択時リセット
// record["備考"]["disabled"] = true; //非選択時入力不可
}

return event;
});

kintone.events.on(["app.record.create.change.備考", "app.record.edit.change.備考", "app.record.index.edit.change.備考"], function(event) {
var record = event.record;
if(record.備考.value) {
record.備考.error = null;
}

return event;
});
})();

changeイベントでfieldの活性などを切り替えて保存前イベントでerror出すしかなさそうですね

これでどうですか?

(function() {
"use strict";

var events = [
"app.record.detail.show",
"app.record.create.show",
"app.record.edit.show",
"app.record.index.edit.show",
"app.record.index.edit.change.チェックボックス",
"app.record.create.change.チェックボックス",
"app.record.edit.change.チェックボックス"
];
kintone.events.on(events, function(event) {
var record = event.record;
var check = record["チェックボックス"]["value"];

if (check.indexOf("sample2") != -1) {
kintone.app.record.setFieldShown("備考", true);
record["備考"]["disabled"] = false;
} else {
kintone.app.record.setFieldShown("備考", false);
record.備考.value = ""; //非選択時リセット
record["備考"]["disabled"] = true; //非選択時入力不可
}

return event;
});

kintone.events.on(["app.record.index.edit.submit", "app.record.create.submit", "app.record.edit.submit"], function(event) {
var record = event.record;
var check = record["チェックボックス"]["value"];
if(check.indexOf("sample2") !== -1 && !(record.備考.value)) {
record.備考.error = "必須です";
}
return event;
});

})();

TK 様

いつも大変お世話になっております。

何度もご丁寧に教えていただき、誠にありがとうございます。

理想な動きができました!チェックボックスについてもとても勉強になりました。

いつも助けていただき、本当にありがとうございます!!