JQuery.validate.js onkeyup = истинная ошибка

С моей конфигурацией проверки jquery я получаю следующую ошибку при установке onkeyup в true. Он работает, если я устанавливаю его в false, но я не получаю подтверждения проверки до тех пор, пока я не размываю поле, и я ищу, чтобы получить подтверждение для каждой клавиатуры:

$("#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

Ответы

Ответ 1

Вам действительно нужно установить опцию onkeyup для функции, которая принимает проверяемый элемент как параметр, поэтому попробуйте изменить:

onkeyup: true, 

к

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

Ответ 2

onkeyup включен по умолчанию, поэтому вам не нужно устанавливать его в true. Если вы это сделаете, вы нарушите функциональность, уже встроенную в плагин.

У вас есть три варианта:


1) Оставьте параметр onkeyup вне .validate(). По умолчанию функция onkeyup включена. (изменение: "по умолчанию" означает, что проверка выполняется на каждом событии "key-up" только после того, как поле первоначально подтверждено другим событием.)

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


ИЗМЕНИТЬ

По умолчанию плагин не выполняет проверку "key-up" до тех пор, пока поле сначала не будет проверено другим событием. ( "Lazy" валидация)

Итак, вот более правильно модифицированная версия функции обратного вызова onkeyup, которая обеспечит немедленную проверку onkeyup. ( "Ожидаемая" проверка)

ДЕМО: http://jsfiddle.net/QfKk7/

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

Ответ 3

@Sparky прав. Правильный ответ заключается в том, чтобы удалить параметр onkeyup, моя скрипка работала, потому что я удалил параметр onkeyup не потому, что изменил его на keyup.

По умолчанию проверка будет происходить при событии keyup, если вы хотите отключить эту функцию, вам нужно добавить настройку onkeyup: false.

См. обновленную демонстрацию.

Демо: Fiddle

Ответ 4

Логические значения не являются допустимыми значениями для события onkeyup. Вместо этого добавьте функцию, что нужно сделать. Попробуйте что-то вроде:

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

Ответ 5

Как насчет расширения 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 необязательно.