【フォームブリッジ】フィールドコード指定で非表示にする方法

何を実現したいのかを書きましょう

フォームブリッジで、特定の値を基準に他のフィールドの表示・非表示を切り替える処理を作成したいです。

発生した問題やエラーメッセージを具体的に書きましょう

現状ではインデックス番号を指定しての非表示は実現できましたが、今後の保守のためにフィールドコードを指定して作成したいです。

実行したコードをコピー&ペーストしましょう

(function() {
  "use strict";

  fb.events.form.mounted = [function(state){
      state.fields[2].hide = true;
      return state;
   }];

  fb.events.fields.standard.changed = [function(state){
      if (state.record.standard.value >= 22000) {
        state.fields[2].hide = false;
        state.fields[3].hide = true;
      } else {
        state.fields[2].hide = true;
        state.fields[3].hide = false;
      } 

    return state;
  }];
})();

ご教示いただけますと幸いです。

私が FormBridge のJSカスタマイズはほぼ未経験なので、熟練の方の回答を参考にしていただきたいですが、気になって調べたらそれっぽいのが出てきたので共有します…。

見た感じ従来のバージョンのフォームを利用していると思うので、その前提で行きますね。

state.fields は配列のようなので、配列の中から 目的のフィールドを絞り込む という処理が必要なようです。
state.fields[n].code がフィールドコードにあたるので、配列を全て回ってフィールドコードが一致するものを見つけることになります。

例えば、こんな感じ。

// for文を使う場合
fb.events.form.mounted = [ function (state) {
  let field;
  for (let i = 0; i < state.fields.length; i++) {
    if (state.fields[i].code === "目的のフィールドコード") {
      field = state.fields[i];
    }
  }
  if (field) {
    field.hide = true;
  }
  return state;
} ];

// Array.prototype.find を使う場合。↑と同じ結果になります
fb.events.form.mounted = [ function (state) {
  const field = state.fields.find(field => field.code === "目的のフィールドコード");
  if (field) {
    field.hide = true;
  }
  return state;
} ];

新バージョンのフォームの場合は、また違った指定方法だと思うので公式のリファレンスをご確認いただくことをお勧めします。

「いいね!」 1

住田様
ご教示いただいた内容で試した結果、想定通りの処理ができました。
旧バージョンということも汲んでくださりありがとうございます。
すごく助かりました!

「いいね!」 1

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。