2

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

$('#myform :input').blur(function() {
    $("#myform").validate().element( this );
});

效果很好。但是我刚刚更新到 1.9,现在我的字段正在验证 keyup 而不是模糊。

我没有对我的设置进行任何更改,只是切换到 1.9。

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

任何帮助,将不胜感激。

澄清

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

现在,该元素正在验证初始输入时的 keyup

4

1 回答 1

10

默认情况下,对于文本输入,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
    });

});

所有版本的工作方式都一样...

工作演示(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
    });

});

工作演示(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/

于 2013-01-26T14:58:06.933 回答