我很清楚jQuery验证的懒惰行为。实际上,这仅是半懒惰的,如果字段包含有效的值,失去焦点,然后将其更改为无效的值,则立即显示错误消息,甚至在该字段再次不关注之前。这种行为非常可靠,除了我想找到解决方法的一种非常具体的情况。
如果字段最初包含有效值,则将其更改为非空的无效值,如预期的那样触发立即验证。但是删除初始值不会触发验证。示例:
<form id="muh-form" action="post">
<input name="input1" type="number" value="10" required min="10"/>
<br/>
<input name="input2" type="text"/>
<br/>
<input type="submit" value="Submit"/>
</form>
如果用户将" 10"更改为" 1"并解开该字段,则如预期的那样立即出现错误消息。此外,如果用户将" 1"更改为空,则如预期的那样,触发required
验证。只有从最初有效到空的直接过渡才能触发验证。
小提琴
作为解决方法,我可以强迫验证器加载表单时立即验证所有字段吗?
QUOTE OP:如果用户将
input1
更改为某些值&lt;10并且不关注该领域,验证是按预期触发的。但是,如果用户只是简单地删除初始值(不先更改它(并取消关注该字段,则不会触发验证。
您正在描述插件的默认验证,该插件称为"懒惰"验证。请参阅文档:
" 在将字段标记为无效之前,验证是懒惰的:在首次提交表单之前,用户可以通过字段选项卡而无需收到烦人的消息 - 他们赢了 - 他们赢了't在有机会实际输入正确的值之前就被漏洞了"
如果您想改用"急切"验证,则需要使用自定义onfocusout
回调函数...
onfocusout: function(element) {
// "eager" validation
this.element(element);
}
演示:jsfiddle.net/r60l5bfx/3/
您可以在change
事件中调用.valid()
。
$(document).ready(function() {
$("#muh-form").on('change', function(e) {
$("#muh-form").valid();
});
$("#muh-form").validate({
submitHandler: function (form) { }
});
});
jsfiddle链接