19

使用我的 jquery 验证配置,将 onkeyup 设置为 true 时出现以下错误。如果我将其设置为 false,它会起作用,但在模糊字段之前我不会得到验证反馈,我希望在每个 keyup 上得到验证:

$("#signupForm").validate({
        onkeyup: true,        
        onclick: false
        // rules omitted for brevity
    }

我收到以下错误:

TypeError: validator.settings[eventType].call is not a function
validator.settings[eventType].call(validator, this[0], event);
jquery.validate.js line 391
4

5 回答 5

39

您实际上需要将onkeyup选项设置为接受正在验证的元素作为参数的函数,因此请尝试更改:

onkeyup: true, 

onkeyup: function(element) {$(element).valid()}
于 2013-02-27T03:20:34.143 回答
36

onkeyup默认启用,因此您无需将其设置为true. 如果这样做,您会破坏插件中已经内置的功能。

你有三个选择:


1)onkeyup选项排除在外.validate()。这会默认启用onkeyup功能。(编辑:“默认情况下”意味着只有在字段最初由另一个事件验证之后,才会在每个“key-up”事件上进行验证。)

演示:http: //jsfiddle.net/ZvvTa/


2) onkeyup可以设置false禁用此选项。

演示:http: //jsfiddle.net/ZvvTa/1/


3) 替换onkeyup为您自己的回调函数以修改其操作方式。(Demo使用默认功能)

演示:http: //jsfiddle.net/ZvvTa/2/

下面是默认的、未修改onkeyup回调函数:

onkeyup: function( element, event ) {
    if ( event.which === 9 && this.elementValue(element) === "" ) {
        return;
    } else if ( element.name in this.submitted || element === this.lastElement ) {
        this.element(element);
    }
}

请参阅: http ://docs.jquery.com/Plugins/Validation/validate#toptions


编辑

默认情况下,在该字段最初由另一个事件 验证之前,插件不会执行任何“key-up”验证。(“懒惰”验证)

所以这里有一个更适当修改的onkeyup回调函数版本,它将提供即时 onkeyup验证。 (“渴望”验证)

演示:http: //jsfiddle.net/QfKk7/

onkeyup: function (element, event) {
    if (event.which === 9 && this.elementValue(element) === "") {
        return;
    } else {
        this.element(element);
    }
}
于 2013-02-27T04:10:46.947 回答
5

@Sparky 是对的,正确的答案是删除该onkeyup选项,我的小提琴正在工作,因为我删除了该onkeyup选项,而不是因为我将其更改为keyup.

默认情况下,验证将在 keyup 事件上发生,如果您想关闭此功能,则必须添加设置onkeyup: false

请参阅更新的演示。

演示:小提琴

于 2013-02-27T03:18:26.947 回答
3

布尔值不是 onkeyup 事件的有效值。而是添加一个功能,关于需要做什么。尝试类似:

    onkeyup: function(element) {
           $(element).valid(); 
    }
    onblur: function(element) { 
         $(element).valid(); 
    }
于 2013-02-27T03:21:55.150 回答
2

如何扩展onkeyup:

    $('#signup-form').validate({

        onkeyup: function(element) {
            var element_id = $(element).attr('id');
            if (this.settings.rules[element_id].onkeyup !== false) {
                $(element).valid();
            }
        },

所以现在在规则内你可以这样做:

        rules: {
            username: {
                required: true,
                minlength: 3,
                maxlength: 25,
                onkeyup: false, /* on blur validation */
            },
            password: {
                required: true,                   
                passwordmeter: true,
                onkeyup: true, /* on keyup validation */
            },

通过扩展onkeyup我们使其成为默认行为,因此粘贴onkeyup: true是可选的。

于 2016-09-02T08:32:39.920 回答