何を実現したいのかを書きましょう
・特定の日付フィールド(ソースではdesireddayと定義)に以下の入力規則を実装したい
①平日のみが選択可能(土日祝は選択できない)
②入力日から1か月以降の日付が選択できる
・その他前提条件
フォームブリッジはステップフォームを利用しており、
制限をかけたいフィールドは2ステップ目で表示
発生した問題やエラーメッセージを具体的に書きましょう
・過去の記事を参考にもしたのですが動作しません
【フォームブリッジ】日付フィールドに制限をかけたい
・自作でもコードを書いてみましたが
動作せず、カレンダーで自由な日が選択できてしまいます
(以下ソースコードは自作側)
イベント発生が指定できていないからでしょうか。。
実行したコードをコピー&ペーストしましょう
// DOMContentLoadedイベントが発生したときに実行される関数を設定
document.addEventListener('DOMContentLoaded', function() {
// 祝日のリストを定義
const holidays = [
'2024-01-01', // 元日
'2024-01-08', // 成人の日
'2024-02-11', // 建国記念の日
// 他の祝日を追加
];
// 入力フィールドとエラーメッセージ要素を取得
const dateField = document.querySelector('input[name="desiredday"]');
const errorMessage = document.createElement('span');
errorMessage.style.color = 'red';
dateField.parentNode.appendChild(errorMessage);
// 入力フィールドの値が変更されたときに実行されるイベントリスナーを追加
dateField.addEventListener('input', function() {
// 入力された日付を取得
const selectedDate = new Date(dateField.value);
const today = new Date();
const oneMonthLater = new Date();
oneMonthLater.setMonth(today.getMonth() + 1);
// 曜日とフォーマットされた日付を取得
const day = selectedDate.getDay();
const formattedDate = selectedDate.toISOString().split('T')[0];
// 入力された日付が1か月以内の場合のエラーメッセージ
if (selectedDate < oneMonthLater) {
errorMessage.textContent = '選択できるのは今日から1か月以降の日付です。';
dateField.value = '';
// 入力された日付が土日または祝日の場合のエラーメッセージ
} else if (day === 0 || day === 6 || holidays.includes(formattedDate)) {
errorMessage.textContent = '平日のみ選択可能です。';
dateField.value = '';
// 有効な日付の場合はエラーメッセージをクリア
} else {
errorMessage.textContent = '';
}
});
});