在验证 1.8 中,我在表单的所有输入元素上使用 $.blur 函数,以便在用户跳出时触发该字段的验证:
$('#myform :input').blur(function() {
$("#myform").validate().element( this );
});
效果很好。但是我刚刚更新到 1.9,现在我的字段正在验证 keyup 而不是模糊。
我没有对我的设置进行任何更改,只是切换到 1.9。
我看到有很多变化,但我没有看到其他文档。
任何帮助将不胜感激。
澄清
以前,我的元素最初会在模糊时进行验证,但如果元素处于错误状态,如果用户返回进行更改,该元素将在 Keyup 等上主动验证。这是我想要的行为。在初始输入时,在模糊之前没有主动验证,但是一旦字段处于错误状态,该字段应主动验证更改、键控等。
现在,该元素正在初始输入时进行键控验证
默认情况下
,对于文本输入,jQuery 验证是在"模糊"(onfocusout:
)、"键up"(onkeyup:
)和"提交"(onsubmit:
)事件上触发的。
要让它只验证"模糊"和"提交"上的字段,只需将onkeyup:
选项设置为 false...
$(document).ready(function() {
$('#myform').validate({
onkeyup: false, // to use onkeyup, remove this line
// other rules and options
});
});
所有版本的工作方式都相同...
工作演示(v1.10):http://jsfiddle.net/M2MLL/
工作演示(v1.9):http://jsfiddle.net/KSgLb/
工作演示(v1.8):http://jsfiddle.net/k87Lp/
onfocusout
的默认行为是,只有在字段中保留某些内容(或在初始提交事件之后)才会开始对字段进行验证,否则,只需将字段留空并单击到新字段不会执行任何操作。
如果您希望每次都对"blur"进行验证,无论如何,只需像这样修改onfocusout:
的回调函数......
$(document).ready(function() {
$('#myform').validate({
onfocusout: function(element, event) {
this.element(element);
},
onkeyup: false,
// other rules and options
});
});
工作演示(v1.9):http://jsfiddle.net/eRNTu/
版本1.10也有效:http://jsfiddle.net/Mev8v/
顺便说一句:虽然我不会对.blur()
这样做,但您的原始代码在 v1.9 和 v1.10 中运行良好。 但是,我相信利用插件onfocusout:
选项的内部功能是实现目标的更强大的方法。
编辑2:
针对OP的最后澄清:
"在初始输入时,在模糊之前没有主动验证,但是一旦字段处于错误状态,该字段应该主动 验证更改、键控等。
这是一个新的工作演示,它修改了onkeyup:
的默认回调函数
onkeyup: function (element, event) {
if (event.which === 9 && this.elementValue(element) === '') {
return;
} else if (element.name in this.submitted ) {
this.element(element);
}
},
该字段最初或未显示错误时将忽略任何onkeyup
验证。 只有当存在活动错误并且用户返回到字段时,onkeyup
验证才会开始运行。
工作演示:http://jsfiddle.net/6s4rj/