【问题标题】:Datepicker max value not being validatedDatepicker 最大值未被验证
【发布时间】:2012-05-15 12:20:24
【问题描述】:

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

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

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

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

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

由于我是 jquery 的新手,我是否遗漏了一些可以在模糊时验证的属性?

【问题讨论】:

    标签: jquery html


    【解决方案1】:

    听起来您想要验证日期选择器字段是否为过去的日期,并且当用户离开该字段时不会进行验证。我对日期选择器不够熟悉,不能说有一种验证方法可以在用户将来离开字段时专门调用,但是当用户离开时你可以很容易地编写自己的验证例程将焦点移出日期选择器字段。

    测试:

    $("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 或其他) 知道为什么他们的输入会被拒绝。

    【讨论】:

    • 是的,我也会在服务器端验证日期的值。谢谢您的建议,非常感谢
    【解决方案2】:

    看起来这是 jquery datepicker 中的一个错误。如 veeTrain 所述,您必须为文本框编写自己的验证。如果你想要现成的东西,或者看看这个。 http://keith-wood.name/uiDatepickerValidation.html

    【讨论】:

    • 插件很好找;你用过吗?
    • 我没有在项目中使用过,但是在网站上测试过。
    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 2019-02-09
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2018-06-09
    • 2013-11-15
    相关资源
    最近更新 更多