我有一个datedicker,maxdate设置为今天。以下是我如何定义它:
$('selector').datepicker({
yearRange: "c-100:+0",
maxDate: '+0d',
changeMonth : true,
changeYear : true,
showAnim:"fold"
});
当用户从 datepicker ui 中进行选择时, maxDate 属性可正常工作。它将所有未来日期显示为已禁用;但是,datepicker允许用户通过键盘输入日期,这也是问题的开始。
当用户按输入(提交表单)时,DatePicker甚至会验证手动输入文本的值,但在模糊时不验证,然后表单是提交;即,当用户从输入框中退出而未按输入时。这允许日期大于最大日期,并且可以在不显示错误的情况下提交。
我可以将文本输入设为只读,但在这种情况下,用户无法通过键盘输入日期。
由于我是jquery的新手,我是否遗漏了一些可以模糊验证的属性?
答案 0 :(得分:2)
听起来您想要将日期选择器字段验证为过去的日期,并且当用户离开该字段时验证不会发生。我对Date Picker的熟悉程度不足以说当用户离开该字段时可以专门调用一个验证方法,但是当用户离开时你可以很容易地编写自己的验证例程重点关注日期选择器字段。
测试:
$("selector").blur(function(e) {
var today = new Date();
if ( $(this).datepicker("getDate") > today ) {
alert("Incorrect");
// Here you could force their field to be equal to
// today if you would like or handle it otherwise
}
});
您还可以在提交时验证该字段。
然而,即使有了所有这些可爱的保护措施,也无法替代这些在服务器端进行验证。如果用户绕过Javascript保护并在将来提交带有日期的表单,您应该验证并提供正确的错误消息。希望对你有帮助。
更新:Here是关于模糊和焦点的非常有趣的讨论,以防您想要锁定离开具有未来值的字段的行为。它可能适用于您想要使用的内容,也可能不适用。
另一个想法是,在您的错误消息中,您可能希望在应输入的日期类型(YYYY-mm-dd)中尽可能具有描述性,以便用户从不同的角度(mm / dd / yy或其他)知道为什么他们的意见被拒绝了。
答案 1 :(得分:2)
看起来这是jquery datepicker中的一个错误。如veeTrain所述,您必须为textbox编写自己的验证。如果你想要现成的东西,或者看看这个。 http://keith-wood.name/uiDatepickerValidation.html