【フォームブリッジ】当日予約の時間を制御したい

まったくの初心者で申し訳ありませんが、お分かりになる方がいらっしゃいましたらお教えいただければ幸いです。

現在、日付フィールドとドロップダウン(時間帯を選択)を組み合わせて、予約フォームを作成しています。

当日予約の場合、入力時の2時間以降の時間帯のみを選択させるようにしたいと考えております。

例)

4/14の14:00に、当日の予約をする場合、

日付フィールドのカレンダーで「4/14」を選択されたら

ドロップダウンで16:00以降の時間帯しか選択できなくなる

といった感じです。

javascriptで上記のような制御をすることは可能でしょうか?

また日付の方は

(function () {
  fb.events.form.mounted = [
    function(state) {
      document.addEventListener('click', function(e){
        var element=e.target, row, cell;
        while(element.parentNode.classList){
          if(element.classList.contains('el-date-table__row')) row = element;
          if(element.parentNode.classList.contains('el-date-table__row')) cell = element;
          element = element.parentNode;
        }
        if(row && cell){
          if([].slice.call(row.children).indexOf(cell)===0 || [].slice.call(row.children).indexOf(cell)===6){
            e.stopPropagation();
            alert('土日は選択できません');
          }
        }
      }, true);
    ]
    
    })();

上記のように土日が選択できないようにする制御を行っております。

こちらと干渉する可能性がないかも懸念しております。

何とぞよろしくお願いいたします。

ikkaさん

こんにちは。

 

時刻は、時刻フィールドではなく、ドロップダウンフィールドとのことで以下のようなフィールド構成でしょうか。

日付(日付フィールド)
開始時刻(ドロップダウンフィールド)
終了時刻(ドロップダウンフィールド)

 

この場合、バリデーション機能を使い
if (開始時刻+2時間 <= 終了時刻)が真であれば何もせず
そうでない場合にエラーを出すようにします。

 

ドロップダウンで選択された値を分に換算して、比較すると実装しやすいかと思います。

もしくは、Luxonを使うと、時刻計算が楽になります。

 

バリデーションの定義は、以前下記で回答させていただきましたので、ご参考ください。

【フォームブリッジ】携帯番号のみを入力できるようにしたい

fb.events.form.mounted = []の中に追記する形で書けば、干渉することはないです。

Koichiさん

いつもありがとうございます!

上記アドバイスいただき、本当にありがとうございます。

こちらでなんとかやってみたいと思います。

また質問させていただく可能性もございますので、その際にはお手数ですがまたよろしくお願いいたします!

ちなみに、終了時時刻のドロップダウンフィールドはなく、

日付(日付フィールド)
開始時刻(ドロップダウンフィールド)

というフィールド構成になっております。

終了時刻は無いのですね。

いずれにしても考え方は、上記の通り、バリデーションを使って制御する形になりますのでお試しください。

ご不明点ございましたら、またコメントください。