jQuery.validate.js onkeyup = true错误

时间:2013-02-27 02:45:39

标签: jquery jquery-validate

使用我的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

5 个答案:

答案 0 :(得分:36)

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

onkeyup: true, 

onkeyup: function(element) {$(element).valid()}

答案 1 :(得分:33)

默认情况下启用

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

您有三种选择:


1)onkeyup选项保留在.validate()之外。这默认情况下会保留onkeyup功能启用。 (编辑:“默认情况下”表示只有在字段最初由另一个事件验证后,才会在每个“键入”事件上进行验证。)

DEMO http://jsfiddle.net/ZvvTa/


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

DEMO 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


修改

默认情况下,插件不会执行任何“键入”验证,直到 字段最初由另一个事件验证后才会执行。 (“懒惰”验证)

因此,这是onkeyup回调函数的更正确修改版本,它将提供立即 onkeyup验证。 (“急切”验证)

DEMO:http://jsfiddle.net/QfKk7/

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

答案 2 :(得分:5)

@Sparky是对的,正确的答案是删除onkeyup选项,我的小提琴正在运行,因为我删除了onkeyup选项并不是因为我将其更改为keyup

默认情况下,验证将在keyup事件中进行,如果您要关闭此功能,则必须添加设置onkeyup: false

请参阅更新的演示。

演示:Fiddle

答案 3 :(得分:3)

布尔值不是onkeyup事件的有效值。而是根据需要添加一个函数。 尝试类似:

    onkeyup: function(element) {
           $(element).valid(); 
    }
    onblur: function(element) { 
         $(element).valid(); 
    }

答案 4 :(得分: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是可选的。