当用户删除原始字段值时,如何触发验证



我很清楚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链接

最新更新