【FormBridge】任意のタイミングでフォーム全体の入力チェックを起動したい

カスタムバリデーションにて以下のように
日付入力Xの値が日付入力AとBの期間に入るようにチェックを行っています。
Xを変更した時は想定どおりの入力チェックが実行されるのですが、
A,Bを変更した際に、A,Bの入力チェックに連動してXの入力チェックを行いたいと考えています。

確認ボタンを押した際にフォーム全体の入力チェックが実行されるようなので、
この処理を呼べれば実現できるように思うのですが、JavaScriptからFormBridgeのフォーム全体の入力チェックを起動することは可能でしょうか。

(() => {
  "use strict"
  fb.addValidators = (state) => {
    return {
      custum_date_between: {
        getMessage: (fieldCode, params) => {
          return `AB期間内の日を入力してください`
        },
        validate: (value, params) => {
          const startDate = state.record["A"].value
          const endDate = state.record["B"].value

          if (!startDate) return true
          if (!endDate) return true
          if (startDate <= value && value <= endDate) return true

          return false
        },
      },
    }
  }
  fb.events.form.created = [(state) => {
    const target = state.fields.find((item) => {
      return item.code === "X"
    })

    target.validations.push({
      params: [],
      rule: "custum_date_between",
    })
  }]          
})()

ansepesさん

こんにちは。

 

A・Bのchangedイベントを使い、A・Bの値変更時に

Xの値を空にして、再セットすることでバリデーションチェックを発火させることができます。

より良い方法があるかもしれませんが、以下のようなコードで実装しました。

fb.events.fields.A.changed = [(state) => {
const temp = state.record.X.value;
state.record.X.value = undefined;
state.record.X.value = temp;
return state;
}]

fb.events.fields.B.changed = [(state) => {
const temp = state.record.X.value;
state.record.X.value = undefined;
state.record.X.value = temp;
return state;
}]

koichiさん

ありがとうございます!

なるほど、valueを再設定すれば良いのですね。

こちら参考にさせていただきます。

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