jQuery Validator自定义方法返回false但仍可以提交表单

时间:2014-08-20 14:31:28

标签: jquery jquery-validate

Here is a JSFiddle 将准确显示正在发生的事情。组装需要一段时间,但我从一开始就应该做些什么。

如果您注释掉规则并取消注释超时逻辑,则不会出现错误 - 但您仍然可以提交表单。

如果您将自定义方法保留在规则中,则会被触发 - 您将始终看到错误。这是有道理的,因为模糊和点击事件是同一个。

我正在使用jQuery Validator来验证表单。我有一个在'onfocusout'属性中调用的自定义方法(下面)。位置输入是自动完成。所以,我使用setTimeOut来创建一个轻微的延迟,让用户有机会从列表中选择一些东西。

逻辑工作正常,如果位置无效,UI会正确显示错误。我仍然可以提交表格。 According to the docs看起来我正确地返回了错误?为了防止表单被提交,我必须有其他的东西。

自定义方法:

$.validator.addMethod('hasValidCityStateZip', function(value, element) {
  return (App.isValidLocation) ? true : false;
}, Messages.invalidCityStateZip);

HTML:

<form>

    ....

    <input type="text" type="text" id="location" name="site" placeholder="City, State/Province, ZIP/Postal Code" data-clear-btn="true" value="" />

    ....

    <input type="submit" value="Submit" />
</form>

1 个答案:

答案 0 :(得分:0)

当您点击submit时,插件会使用您已声明的规则评估表单,可以在.validate()内使用其他标准方法。由于您显然没有在hasValidCityStateZip函数之外的任何地方声明onfocusout方法,因此只会在blur上调用此自定义方法;单击提交按钮时不会调用它。

修改

在查看your jsFiddle后,您似乎已经自己完成了95%的验证,插件只留下了放置标签元素的简单任务。因此,我认为从头开始编写完整的自定义表单验证功能会好得多。