ドロップダウンの値に応じて、フィールドコードの制御(必須項目化)を行いたい。

ドロップダウンの選択肢に応じて、

フィールドコードを下記のように制御したいと考えております。

まずはドロップダウンの値が変更された際に、

必須な場所に”必須項目!”というエラー表示を出す。

という方法を考え、

(function () {

"use strict";

var events = ['app.record.edit.change.ドロップダウン'
,'app.record.create.change.ドロップダウン'
,'app.record.index.edit.change.ドロップダウン'];

 kintone.events.on(events, function(event){
var record = event.record;
switch (record['ドロップダウン']['value']){
case "選択肢A":
if ( record['field_1']['value'] === "" ){
record['field_1']['error'] = "必須項目!";
}
if ( record['field_2']['value'] === "" ){
record['field_2']['error'] = "必須項目!";
}
if ( record['field_3']['value'] === "" ){
record['field_3']['error'] = "必須項目!";
}
if ( record['field_4']['value'] === "" ){
record['field_4']['error'] = "必須項目!";
}
if ( record['field_5']['value'] === "" ){
record['field_5']['error'] = "必須項目!";
}
if ( record['field_6']['value'] === "" ){
record['field_6']['error'] = "必須項目!";
}
if ( record['field_7']['value'] === "" ){
record['field_7']['error'] = "必須項目!";
}
if ( record['field_8']['value'] === "" ){
record['field_8']['error'] = "必須項目!";
}
if ( record['field_9']['value'] === "" ){
record['field_9']['error'] = "必須項目!";
}
break;
case "選択肢B":
if ( record['field_1']['value'] === "" ){
record['field_1']['error'] = "必須項目!";
}
if ( record['field_2']['value'] === "" ){
record['field_2']['error'] = "必須項目!";
}
if ( record['field_3']['value'] === "" ){
record['field_3']['error'] = "必須項目!";
}
record['field_4']['disabled'] = true;
record['field_5']['disabled'] = true;
record['field_6']['disabled'] = true;
record['field_7']['disabled'] = true;
record['field_8']['disabled'] = true;
record['field_9']['disabled'] = true;
break;
case "選択肢C":
case "選択肢D":
case "選択肢E":
if ( record['field_4']['value'] === "" ){
record['field_4']['error'] = "必須項目!";
}
if ( record['field_5']['value'] === "" ){
record['field_5']['error'] = "必須項目!";
}
if ( record['field_6']['value'] === "" ){
record['field_6']['error'] = "必須項目!";
}
if ( record['field_7']['value'] === "" ){
record['field_7']['error'] = "必須項目!";
}
if ( record['field_8']['value'] === "" ){
record['field_8']['error'] = "必須項目!";
}
if ( record['field_9']['value'] === "" ){
record['field_9']['error'] = "必須項目!";
}
record['field_1']['disabled'] = true;
record['field_2']['disabled'] = true;
record['field_3']['disabled'] = true;
break;
case "選択肢F":
record['field_1']['disabled'] = true;
record['field_2']['disabled'] = true;
record['field_3']['disabled'] = true;
record['field_4']['disabled'] = true;
record['field_5']['disabled'] = true;
record['field_6']['disabled'] = true;
record['field_7']['disabled'] = true;
record['field_8']['disabled'] = true;
record['field_9']['disabled'] = true;
break;
default:
record['field_1']['disabled'] = false;
record['field_2']['disabled'] = false;
record['field_3']['disabled'] = false;
record['field_4']['disabled'] = false;
record['field_5']['disabled'] = false;
record['field_6']['disabled'] = false;
record['field_7']['disabled'] = false;
record['field_8']['disabled'] = false;
record['field_9']['disabled'] = false;
break;
}
return event;
}

そもそも動いてくれず、ほぼ内容は同じですが、

上記内容をドロップダウンの値を変更した際に~ではなく、

レコードの保存時~に変更して作ってみましたが、

こちらも上手くいかず。

 

どこが間違っているのかもわからなくなってしまい、

投稿させていただきました。

大川さん

プログラムソースの最後の部分の閉じかたですかね。

これを、

こうすると、

動くと思います。

 

 

 

書き忘れ。元のソースを動かしてみると。

こんな感じでエラーが出ましたので、そこから原因を探しました。

エラー内容を確認しながら、コーディングを進めると、スムーズにデバッグできてよいかなと思います。

大川 義昭さん

 

こんにちは。

もしかしたらコードの閉じ括弧が無いからかも??

return event; 部分のコードを以下の様にしてみてください。

  return event;
 });
}());

すでに回答済みでしたね。失礼しました~

皆さまありがとうございます。

 

ご指摘の括弧と、文章中では簡素に書いていた「選択肢A~F」が、

実際の物とは異なっていた為でした。

 

助かりました。

 

 

 

大川さん

編集画面表示処理とsubmit 処理を分けたほうがよさそうです。
ちょっとおもしろそうなので、試作してみました。
入力が disabled の場合は、値をクリアしましたがそこは調整してください。

(function () {
"use strict";

var fieldsCtl = {
'選択肢A': {
'field_1': true, 'field_2': true, 'field_3': true, 'field_4': true, 'field_5': true, 'field_6': true, 'field_7': true, 'field_8': true, 'field_9': true,
},
'選択肢B': {
'field_1': true, 'field_2': true, 'field_3': true, 'field_4': false, 'field_5': false, 'field_6': false, 'field_7': false, 'field_8': false, 'field_9': false,
},
'選択肢C': {
'field_1': false, 'field_2': false, 'field_3': false, 'field_4': true, 'field_5': true, 'field_6': true, 'field_7': true, 'field_8': true, 'field_9': true,
},
'選択肢D': {
'field_1': false, 'field_2': false, 'field_3': false, 'field_4': true, 'field_5': true, 'field_6': true, 'field_7': true, 'field_8': true, 'field_9': true,
},
'選択肢E': {
'field_1': false, 'field_2': false, 'field_3': false, 'field_4': true, 'field_5': true, 'field_6': true, 'field_7': true, 'field_8': true, 'field_9': true,
},
'選択肢F': {
'field_1': false, 'field_2': false, 'field_3': false, 'field_4': false, 'field_5': false, 'field_6': false, 'field_7': false, 'field_8': false, 'field_9': false,
},
}

var events = ['app.record.edit.change.ドロップダウン' ,'app.record.create.change.ドロップダウン','app.record.index.edit.change.ドロップダウン',
'app.record.edit.show','app.record.create.show','app.record.index.edit.show'
];
kintone.events.on(events, function(event){
var record = event.record;

if (record['ドロップダウン'].value) {
var ctl1 = fieldsCtl[record['ドロップダウン'].value];
var fkeys = Object.keys(ctl1);
fkeys.map(function(fcode) {
record[fcode]['disabled'] = !ctl1[fcode];
if (!ctl1[fcode]) {
record[fcode].value = '';
}
});
}

return event;
});

kintone.events.on(['app.record.edit.submit','app.record.create.submit', 'app.record.index.edit.submit'], function(event){
var record = event.record;

if (record['ドロップダウン'].value) {
var ctl1 = fieldsCtl[record['ドロップダウン'].value];
var fkeys = Object.keys(ctl1);
fkeys.map(function(fcode) {
record[fcode]['disabled'] = !ctl1[fcode];
if (ctl1[fcode]) {
if (!record[fcode].value) {
record[fcode]['error'] = '必須項目!';
event.error = '必須項目 エラー';
}
}
else {
record[fcode].value = '';
}
});
}

return event;
});

})();

rex0220さん

ありがとうございます。

思っていた通りの動作になりました!