背景・実現したいこと
選択肢が変更したときに、ファイル項目の初期化および必須設定を動的に変更したい
エラー情報 (開発者ツールのコンソール)
初期的な質問かもしれませんが、よろしくおねがいします
背景・実現したいこと
選択肢が変更したときに、ファイル項目の初期化および必須設定を動的に変更したい
エラー情報 (開発者ツールのコンソール)
初期的な質問かもしれませんが、よろしくおねがいします
hiroさん
お世話になっております。
エラーが出た際に利用した、カスタマイズのコードのご提示は可能でしょうか?
江田篤史様
ご連絡ありがとうございます。
ソースは下記となります。
・項目の初期化
ファイルのValueである配列の初期化を行いましたが、エラーとなりできませんでした。
function clearValue_for_hidden(state) {
for (const fieldState1 of state.fields) {
if ((fieldState1.type === ‘LABEL’) ||
(fieldState1.type === ‘FILE’) ||
(fieldState1.type === ‘HR’)
) {
} else if (fieldState1.hide) {
if ((typeof fieldState1.defaultValue !== “null”) &&
(typeof fieldState1.defaultValue !== “undefined”)) {
state.record[fieldState1.code].value = fieldState1.defaultValue;
console.log(“AT clearValue_for_hidden, set default value:” +
fieldState1.code +
" as <" + fieldState1.type + “><” +
(typeof fieldState1.defaultValue) + “>:"” +
state.record[fieldState1.code].value + “"”);
} else {
switch (fieldState1.type) {
case ‘SINGLE_LINE_TEXT’:
case ‘MULTI_LINE_TEXT’:
state.record[fieldState1.code].value = “-”;
break;
case ‘NUMBER’:
case ‘DATE’:
case ‘RADIO_BUTTON’:
case ‘DROP_DOWN’:
state.record[fieldState1.code].value = “”;
break;
case ‘MULTI_SELECT’:
case ‘SUBTABLE’:
record[item].value = [];
break;
case ‘FILE’: // TODO:もしFILEを消すならBLOB領域の削除など、丁寧な処理が必要。
break;
default:
console.error(“IMPLEMENT ERROR at clearValue_for_hidden : unsupported type=” + fieldState1.type, fieldState1)
}
console.log(“AT clearValue_for_hidden, set default value:” +
fieldState1.code +
" as <" + fieldState1.type + “>:"” +
state.record[fieldState1.code].value + “"”);
}
fieldState1.required = false;
for (let i = fieldState1.validations.length - 1; i >= 0; i–) {
if (fieldState1.validations[i].rule === ‘required’) {
fieldState1.validations.splice(i, 1);
}
}
} else {
fieldState1.required = true;
if (fieldState1.validations.findIndex(c => (c.rule === “required”)) < 0) {
fieldState1.validations.push({ params: [], rule: “required” });
}
}
}
}
必須設定の動的制御については、下記で行っていますが、fieldState1の対象にファイル項目を含めたところ、エラーとなりました。
if (fieldState1.hide) {
fieldState1.required = false;
} else {
fieldState1.required = condition1;
}
if (!fieldState1.required) {
for (let i = fieldState1.validations.length - 1; i >= 0; i–) {
if (fieldState1.validations[i].rule === ‘required’) {
fieldState1.validations.splice(i, 1);
}
}
} else {
if (fieldState1.validations.findIndex(c => (c.rule === “required”)) < 0) {
fieldState1.validations.push({ params: [], rule: “required” });
}
}
以上よろしくおねがいします
hiroさん
お世話になっております。
ご提示ありがとうございます。
エラーの原因が「項目の初期化」か「必須設定の動的制御」のどちらなのか整理がしたいですね。
どちらかのみを有効にして、それぞれどのようなエラーが出るかご確認いただけますか?
> ファイルのValueである配列の初期化を行いましたが、エラーとなりできませんでした。
ご提示いただいたコードですと配列の初期化というのは行われていなさそうですが、エラーが出たときは下記のような記述をしていたということでしょうか?
case 'FILE':
state.record[fieldState1.code].value = [];
エラーが出ていた際の記述を教えていただけると、なにかお力になれるかもしれません。
江田篤史様
ご連絡ありがとうございます。
現在は、修正して元のソースは有りませんが、初期化はご提示いただきました処理で行っていました。
また、切り分けとして現在は必須の除外だけにしたところ、当初のコンソールエラーが表示されました。
hiroさん
> 初期化はご提示いただきました処理で行っていました。
こちらの記述で、初期化は正常に動作しますか?
> 必須の除外だけにしたところ、当初のコンソールエラーが表示されました。
切り分けありがとうございます。
state.fields[添付ファイルのフィールド番号].validations にバリデーションの値が正しくセットされているか、確認してみると良いと思います。(フィールド番号はフォームの左上から数えたフィールドの順番(0始まりの整数)です)
恐らく、選択肢のchangeイベントの最後でstateをreturnしているかと思います。
そちらにブレークポイントを貼って、stateの中身を確認してみると良いと思います。
https://ics.media/entry/190517/
正しいか判断する比較対象としては、必須の切り替えが正しく動作しているフィールドについて見てみると良いかと思います。
state.fields[添付ファイルのフィールド番号].validations と state.fields[必須の切り替えが正しく動作しているフィールドの番号].validations に違いがないか見てみると良いかと思います。
江田篤史様
アドバイスありがとうございます。
> 初期化はご提示いただきました処理で行っていました。
こちらの記述で、初期化は正常に動作しますか?
→ 先程確認したところ、無事どうさしました。ありがとうございます。
必須については、一度切り分けを進めたいと思います。
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。