【问题标题】:jquery.validate dateISO: Is this actually usable?jquery.validate dateISO:这真的有用吗?
【发布时间】:2013-07-15 19:41:58
【问题描述】:

我一直在尝试使用 jquery.validate 来验证其中包含日期字段的表单。我可以让它在模糊时正确验证:我在我想要这样做的字段中添加了一个 validateonblur 属性:

        $("input[validateonblur]").blur(function () {
            $(this.form).validate().element(this);
        });

但是当我提交表单时,此时的验证只会验证必填字段。它不关心日期字段中的垃圾类型。它完全忽略了 dateISO 属性,无论我是否将其作为 HTML 中的属性...

<input name="DOB" id="DOB" type="text" required dateISO="true" class="blah" />

...或者像这样:

    $("#MyForm").validate( {
        rules: {
            DOB: {
                required: true,
                dateISO: true
            }
        } );

...或两者兼而有之。

另外,我注意到当我提交表单时,它会显示弹出/工具提示的错误信息,而当我调用 $(this.form).validate().element(this); 时,它会指示错误一种完全不同的方式,在 HTML 中插入标签。但是话又说回来,他们的dateISO documentation page 有一个与我所看到的行为完全不同的示例:它确实验证了实际的日期值,并且它在表单提交的标签中出现了错误。为什么?!他们没有给它任何我没有的参数。为什么他们会得到不同的结果?

文档非常简陋。文档声称,当您在表单上调用 validate() 以设置验证时,会为表单提供一个 valid() 方法,但在运行时它是未定义的:

//  UPDATE: I had a very poor understanding of jquery when I wrote this. 
alert(MyForm['validate']); // 'undefined'

这个库是否处于可用状态,还是我在浪费时间?

【问题讨论】:

  • 弹出窗口由您的浏览器生成,我假设您提交后是 Chrome。您的需求是否都按顺序加载/调用?
  • 您到底为什么要在您的字段中添加onblur 事件? jQuery Validate 插件已经默认启用了验证onfocusout
  • @RobAdams - 这解释了很多 - 它比我意识到的更糟糕!你是对的,我刚刚删除了所有 jquery.validate 东西,它仍然给了我那些弹出窗口。什么是“要求”?我包括的 .js 文件?我直接从一个 j.v 示例中复制了所有内容,更改了路径以适应,至少一些 j.v 代码确实有效,所以......不知道。
  • jQuery 和你的 JS 文件。在我尝试加载验证之前,我只能通过不加载 jQuery 来实现这一点。 Onblur 应该自行验证。您必须调用它的事实应该会导致您遇到问题。你的控制台是什么样子的?
  • @EdPlunkett 您是否将所有脚本都调用到了身体底部?你有上面验证的jquery吗?是您使用 validate 调用脚本块的最后一件事吗?

标签: jquery jquery-validate


【解决方案1】:

您的代码:alert( MyForm['valid'] );

那是什么语法?

你试过了吗:alert( $('#MyForm').valid() );

演示:http://jsfiddle.net/bscTU/

引用 OP:

这个库是否处于可用状态,还是我在浪费时间?

这是迄今为止使用最广泛的 jQuery 验证插件。它的开发人员是 jQuery 和 jQuery UI 开发团队的成员。因此,尽管存在任何用户或文档问题,但它非常可靠。

为什么要向您的各个字段添加onblur 事件? jQuery Validate 插件已经默认启用了onfocusout validation。演示 onfocusout 的实际效果:http://jsfiddle.net/WgyW5/

【讨论】:

  • 我尝试了两种方式调用 .valid() 。它没有定义。我添加了 onblur 因为在我这样做之前没有任何关于模糊的验证。我将代码从stackoverflow上的答案复制给遇到同样问题的其他人。 “那个语法”是访问 JS 对象属性的一种方式。页面加载后,在 IE 和 Chrome 中,任何具有 ID 属性的元素都会在 DOM 命名空间中定义为其 ID。我在 HTML 中有
    ...
    ,在搞乱 jquery.validate 时,我懒惰地依赖该功能,而不是更安全地调用 getElementById() 来处理所有事情。
  • 哦,天哪,你必须把所有脚本的东西放在表格后面。
【解决方案2】:

答案原来是使用Parsley.js。我让它在下载后的五分钟内进行可用验证。

一些自定义验证的东西有一些限制(例如,动态生成错误消息是一个奇怪的麻烦,例如(例如,如果您添加一个比较值的自定义验证器,则引用用户可理解的字段名称)两个字段(更新:简单——当然,您可以在 HTML 中执行每个字段的自定义错误消息!))),但到目前为止我真的很喜欢它。例如,编写一个使用 moment.js 来验证任意日期格式的自定义验证器是微不足道的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2019-03-15
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多