jQuery验证器自定义方法返回false,但仍然可以提交表单

jQuery验证器自定义方法返回false,但仍然可以提交表单,jquery,jquery-validate,Jquery,Jquery Validate,这将准确显示正在发生的事情。组装花了一段时间,但我从一开始就应该做一些事情 如果您注释掉了规则,并且取消了对超时逻辑的注释,您将不会得到错误-但是您仍然可以提交表单 如果您将自定义方法保留在规则中,它将被触发,并且您将始终看到错误。这很有意义,因为模糊和单击事件是同一个事件 我正在使用验证表单。我有一个自定义方法(如下所示),它在'onfocusout'属性中调用。位置输入是自动完成的。因此,我使用setTimeOut创建一个轻微的延迟,让用户有机会从列表中选择一些内容 逻辑工作正常,如果位置无

这将准确显示正在发生的事情。组装花了一段时间,但我从一开始就应该做一些事情

如果您注释掉了规则,并且取消了对超时逻辑的注释,您将不会得到错误-但是您仍然可以提交表单

如果您将自定义方法保留在规则中,它将被触发,并且您将始终看到错误。这很有意义,因为模糊和单击事件是同一个事件

我正在使用验证表单。我有一个自定义方法(如下所示),它在
'onfocusout'
属性中调用。位置输入是自动完成的。因此,我使用
setTimeOut
创建一个轻微的延迟,让用户有机会从列表中选择一些内容

逻辑工作正常,如果位置无效,UI将正确显示错误。不过,我仍然可以提交表格。看起来我返回的错误是正确的?我肯定还遗漏了什么东西来阻止表单提交

自定义方法:

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


....
....

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

编辑


在查看之后,您似乎已经自己完成了95%的验证,插件只剩下放置标签元素的简单任务。因此,我认为您最好从头开始编写一个完整的自定义表单验证函数。

请显示相关的HTML。我从未见过有人从
onfocusout
中调用特定的方法。通常,
onfocusout
只是触发字段的验证,方法在别处声明,并由插件自动处理。还有,这里提供的答案到底有什么问题@我不好,我应该更新那篇文章。这就是问题所在。我无法在规则中使用它-我无法在自定义方法中设置超时。我正在做一个JS文件来帮忙。早就应该这么做了。@dragonslovetacos,如果您不能在规则中设置自定义方法(顺便说一句-为什么?),那么当您单击
submit
,它将永远不会被调用。当我在规则中设置自定义方法时,当用户模糊输入时,会立即触发自定义方法。用户正试图从自动完成列表中选择一个值(这会导致触发模糊事件)。因此表单总是显示位置无效的错误。然后,用户必须再次单击以选择有效位置。@dragonslovetacos,表单上有多少输入?你的情况是如此独特,你可能更容易从头开始编写自己的验证函数,而不是试图欺骗插件使其正常工作。没有那么多-我认为这只是一个非常独特的情况。我已经用JSFIDLE更新了我的帖子。非常感谢你的帮助!!
<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>