jQuery验证插件 - $ .blur上的验证似乎在升级到1.9时发生变化

Jas*_*son 2 jquery blur jquery-validate

使用验证1.8,我在所有表单的输入元素上使用$ .blur函数,以在用户选中时触发该字段的验证:

$('#myform :input').blur(function() {
    $("#myform").validate().element( this );
});
Run Code Online (Sandbox Code Playgroud)

哪个很好用.但是我刚刚更新到1.9,现在我的字段正在验证密钥而不是模糊.

我的设置没有改变任何东西,只是切换到1.9.

我看到有很多变化,但我没有看到其他文档.

任何帮助,将不胜感激.

澄清

之前,我的元素最初将在模糊上验证,但如果元素处于错误状态,则元素将主动验证keyup等,如果用户重新进行更改.这是我想要的行为.在初始输入时,在模糊之前没有活动验证,但是一旦字段处于错误状态,该字段应该主动验证更改,密钥等.

现在,该元素在初始条目的密钥上进行验证

Spa*_*rky 9

默认情况下,对于文本输入,jQuery Validate在"blur"(onfocusout:),"keyup"(onkeyup:)和"submit"(onsubmit:)事件上触发.

要让它只验证"模糊"和"提交"字段,只需将onkeyup:选项设置为false ...

$(document).ready(function() {

    $('#myform').validate({
        onkeyup: false, // to use onkeyup, remove this line
        // other rules and options
    });

});
Run Code Online (Sandbox Code Playgroud)

所有版本的工作方式相同......

工作演示(v1.10):http: //jsfiddle.net/M2MLL/

工作演示(v1.9):http: //jsfiddle.net/KSgLb/

工作演示(v1.8):http: //jsfiddle.net/k87Lp/

默认行为onfocusout是,只有在字段中(或初始提交事件之后)保留某些内容后,才会开始对字段进行验证,否则只需将该字段留空并单击一个新字段即可.


如果你想每次都在"模糊"上进行验证,无论如何,只需修改回调函数onfocusout:就像这样......

$(document).ready(function() {

    $('#myform').validate({
        onfocusout: function(element, event) {
            this.element(element);
        },
        onkeyup: false,
        // other rules and options
    });

});
Run Code Online (Sandbox Code Playgroud)

工作演示(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);
        }
    },
Run Code Online (Sandbox Code Playgroud)

该字段将在最初或未显示错误时忽略任何onkeyup验证.只有当存在活动错误并且用户返回到该字段时,onkeyup验证才会开始运行.

工作演示:http: //jsfiddle.net/6s4rj/