フォームブリッジ アラート

フォームブリッジで、確認画面移行前にアラートを出したいです。

 

日付フィールドの値が、

回答時間が午前中なら、明後日以降が選択可能で、

回答時間が午後なら、3日後以降を選択可能にしたいです。

上記条件に一致しなかった場合にアラートを出したいです。

 

また、可能であれば

水曜日は選択不可(選択した場合はアラート)にして、水曜日は日数のカウントから除きたいです。

 

例:月曜の午後に回答したら、金曜日以降が選択可能

木曜の午後に回答したら、日曜日以降が選択可能

 

このような設定はできますでしょうか?

Oさん

お世話になっております。

JavaScriptカスタマイズにて、実装可能です。
https://form.kintoneapp.com/help/customize

フォームから確認画面に移動する前に「fb.events.form.confirm イベント」が発生するので、こちらを利用するとよいかと思います。
入力した値は、イベントの例のコードのように、stateオブジェクトのrecordプロパティから取得できます。

日付に関する実装を行う際は、Dateオブジェクトを使うか、dayjsなどのライブラリを使うと良いと思います。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date
https://github.com/iamkun/dayjs

アラートはalert()メソッドで実装できます。
https://developer.mozilla.org/ja/docs/Web/API/Window/alert

江田さん

ご回答ありがとうございます。実現できました。

 

追加で教えていただきたいのですが、

上記のアラートだと「OK」を押すと確認画面に進んでしまうため、

確認画面に進まないようにするカスタマイズをいれるか、

バリデーションでのエラーメッセージにすることを考えています。

 

前者のカスタマイズは可能でしょうか?

可能であればこちらの方法を教えていただきたいです。

 

難しい場合は、バリデーションで条件毎に別のメッセージを表示する方法を教えていただきたいです。

以下のサイトを参考に、1つの条件に引っ掛かった時に任意のメッセージを出すことはできましたが、

条件が複数あって、それに合わせたエラーメッセージを表示する方法がわかりませんでした。

フォームブリッジ上でのバリデーションについて

 

例 水曜日を選択してたら「水曜日は選択できません」

午前中の回答で明日以前を選択していたら「明後日以降を選択してください」

 

よろしくお願いいたします。

Oさん

お世話になっております。

たしかに、alertだけではページ遷移してしまいますね。
失礼いたしました。

フォームブリッジでは明示的にイベントキャンセルはできません。
https://developer.cybozu.io/hc/ja/community/posts/115020408023/comments/115005463003

バリデーションを設定するのが正攻法かと思います。

複数のルールを作成し、それらをpush()すればよいかと思います。
下記は複数ルールを設定する例になります。

fb.events.form.created.push(function(state) {
  var fieldCode = 'number';
  var field = state.fields.filter(function(field) {
    return field.code === fieldCode;
  })[0];
  field.validations.push({rule: 'rule1'});
  field.validations.push({rule: 'rule2'});
  return state;
});
fb.addValidators = function() {
  return {
    rule1: {
      getMessage: function() {
        return '0より大きくしてください';
      },
      validate: function(value) {
        return value > 0;
      }
    },
    rule2: {
      getMessage: function() {
        return '5より小さくしてください';
      },
      validate: function(value) {
        return value < 5;
      }
    },
  }
}

江田様

お世話になっております。
実現できました。ありがとうございました。

上記コードを利用して、テーブル内の項目にも制限をつけたいのですが、
テーブル内項目はどのように指定したらよいでしょうか?
フィールドコードでの指定方法を教えていただけると幸いです。

よろしくお願いいたします。

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