日付の手動入力を許可する必要があるページにjQuerydatepickerがありますが、日付が1日以内であることを検証する必要もあります。ピッカーコントロールはmaxDateを介して制限されていますが、手動で日付を入力すると、1日以上先の日付を入力できます。どうやってそれを止めるのですか?これが私がこれまでに持っているものです:
$(".datepicker").attr("placeholder", "mm-dd-yyyy").datepicker({
showOn: "button",
maxDate: "+1",
showOtherMonths: true
});
上記の回答は正しいですが、フォームは検証されません。ユーザーは引き続きフォームを送信できます。
いくつかの調査を行いましたが、nyが見つかりませんでした。最終的に、正常に機能してフォームを検証し、正しい日付が入力されるまでフォームを送信しないこの関数を作成しました。お役に立てば幸いです。
あなたがする必要がある唯一のことはこのコードを追加することです、そしてそれからこれは 'datePicker'クラスを持つすべてのフィールドに適用されます。
$(".datePicker").datepicker({
dateFormat: 'd/mm/yy',
changeMonth: true,
changeYear: true,
firstDay: 1,
minDate: Date.parse("1900-01-01"),
maxDate: Date.parse("2100-01-01"),
yearRange: "c-90:c+150"
});
// validation in case user types the date out of valid range from keyboard : To fix the bug with out of range date time while saving in sql
$(function () {
$.validator.addMethod(
"date",
function (value, element) {
var minDate = Date.parse("1900-01-01");
var maxDate = Date.parse("2100-01-01");
var valueEntered = Date.parse(value);
if (valueEntered < minDate || valueEntered > maxDate) {
return false;
}
return !/Invalid|NaN/.test(new Date(minDate));
},
"Please enter a valid date!"
);
});
直接入力してコントロールの値が変更された場合に、datepickerがイベントを発生させるかどうかはわかりません。関数を.change()
イベントにバインドできます。
$(".datepicker").attr("placeholder", "mm-dd-yyyy").datepicker({
dateFormat: "mm-dd-yy", // since you have defined a mask
maxDate: "+1",
showOn: "button",
showOtherMonths: true
}).on("change", function(e) {
var curDate = $(this).datepicker("getDate");
var maxDate = new Date();
maxDate.setDate(maxDate.getDate() + 1); // add one day
maxDate.setHours(0, 0, 0, 0); // clear time portion for correct results
if (curDate > maxDate) {
alert("Invalid date");
$(this).datepicker("setDate", maxDate);
}
});
1つのオプションは、入力フィールドをreadonly
にして、手動で日付を入力する機能を削除することです。これにより、ユーザーが手動でクレイジーなものを入力することが制限され、日付ピッカーの使用が強制されます。