2

我有一个日期选择器,maxdate 设置为今天。这是我定义它的方式:

$('selector').datepicker({
yearRange: "c-100:+0",
maxDate: '+0d',
changeMonth : true,
changeYear : true,
showAnim:"fold"
});

当用户从datepicker ui中选择时, maxDate属性可以正常工作。它将所有未来日期显示为禁用;但是,datepicker 也允许用户通过键盘输入日期,这也是问题开始的地方。

DatePicker 甚至在用户按下回车(提交表单)时验证手动输入的文本的值,但在模糊然后提交表单时不验证它;即,当用户离开输入框而不按enter时。这允许日期大于最大日期,并且可以在不显示错误的情况下提交。

我可以将文本输入设为只读,但在这种情况下,用户无法通过键盘输入日期。

由于我是 jquery 的新手,我是否缺少一些可以在模糊上验证的属性?

4

2 回答 2

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 保护并提交带有未来日期的表单,您应该验证并提供适当的错误消息。希望对您有所帮助。

更新是一个关于模糊和焦点的非常有趣的讨论,以防你想锁定离开字段的行为与未来的价值。它可能适用于也可能不适用于您想要做/使用的事情。

另一个想法是,在您的错误消息中,您可能希望尽可能描述应输入的日期类型(YYYY-mm-dd),以便来自不同角度(mm/dd/yy 或其他)的用户知道原因他们的意见被拒绝了。

于 2012-05-15T12:33:00.040 回答
2

It looks like this is a bug in jquery datepicker. You will have to write your own validation for textbox as mentioned by veeTrain. Or take a look at this if you want something readymade. http://keith-wood.name/uiDatepickerValidation.html

于 2012-05-15T12:42:42.703 回答