Javascript 如何在“场模糊”(field blur)上验证整个表单,而不仅仅是在模糊的场上
我有一个表单,它使用jQuery验证,使用不引人注目的验证来声明规则。目前,我使用默认的提交行为,在提交表单(验证表单中的每个字段)之前,不会对模糊进行验证,之后,后续的模糊只验证模糊的字段 我想改变这种行为,这样在提交后,模糊单个字段将重新验证整个表单,这样错误摘要将保留在屏幕上,直到每个问题都得到解决。提交前的行为应保持不变 基于其他SO答案,我尝试了以下Javascript 如何在“场模糊”(field blur)上验证整个表单,而不仅仅是在模糊的场上,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,我有一个表单,它使用jQuery验证,使用不引人注目的验证来声明规则。目前,我使用默认的提交行为,在提交表单(验证表单中的每个字段)之前,不会对模糊进行验证,之后,后续的模糊只验证模糊的字段 我想改变这种行为,这样在提交后,模糊单个字段将重新验证整个表单,这样错误摘要将保留在屏幕上,直到每个问题都得到解决。提交前的行为应保持不变 基于其他SO答案,我尝试了以下onfocusout方法,但没有成功: onfocusout: function(element, event) { $(elem
onfocusout
方法,但没有成功:
onfocusout: function(element, event) {
$(element).valid();
}
及
this.element(element)
和$(element).valid()
都用于触发单个元素的验证。在您的情况下,由于您试图在.validate()
或.setDefaults()
方法的选项中应用此选项,因此不能使用.valid()
,因为它可能会触发无限递归
剩下.element()
。但是,您只能在单个字段上使用此选项,而不能在整个表单上使用此选项
如何在字段模糊而不仅仅是模糊字段上验证整个表单
我想改变这种行为。。。模糊单个字段将重新验证整个表单 解决方案是编写一个附加到所有相关输入元素的外部
blur
事件处理程序,并触发附加到表单的.valid()
方法。编辑此通用示例中适用于特定表单的选择器
$('#myform input[type="text"]').on('blur', function() {
$('#myform').valid(); // <- trigger validation on entire form
});
$('#myform input[type=“text”]”)。在('blur',function()上{
$(“#myform”).valid();/@Azim,绝对不是。.valid()
方法不属于.validate()
方法内部的任何地方,因为它可能会导致无限递归。通常,.element()
是.validate()内部的适当方法
…但是,在本例中,似乎无法使用此方法触发整个表单的验证。请参阅:感谢您的详细解释!由于我有超过200个不同的表单,我已覆盖了验证器的默认值onfocusout
,只需执行$(element.form)。valid()
如果此.submitted
为空,则任何元素都将验证它所处的任何表单,只要表单没有初始提交。我已将相同的行为添加到默认的onkeyup
验证消息中。只需对您的答案进行更正/添加。要验证表单,还可以使用validator.form()
假设validator=$(“选择器”).validate()
。请参见@Arkni,true,但是validator.form()
方法在.validate()
方法中使用时,也可能导致无限递归。@Sparky您能否详细说明validator.form()
或$(form).validate()的用法
会导致无限递归吗?从代码的角度来看,我看不出这怎么可能。@Arkni,因为.validate()中有某些函数
如errorPlacement
,highlight
,unhighlight
等在每次验证元素时都会被调用。因此,当您从这些元素中触发.valid()
时,它会在内部再次触发这些函数。validate
再次调用.valid()
等等。由于开发人员以this.element(element)
的形式提供了一种变通方法,因此您可以轻松避免这种潜在的场景。
$('#myform input[type="text"]').on('blur', function() {
$('#myform').valid(); // <- trigger validation on entire form
});