【发布时间】: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 调用脚本块的最后一件事吗?