Плагин проверки jQuery не может проверить на Keyup

Я использую плагин проверки jQuery, и моя форма может быть проверена, как показано ниже (скажем, у меня есть 2 поля A и B):

Это работает:
я нажал A и набрал что-то, а затем удалил. Затем я нажал B. В этом случае отображается сообщение проверки.

НЕ РАБОТАЕТ:
я **нажал A и ничего не набрал. Затем я нажал B. В этом случае соответствующее сообщение проверки, относящееся к полю A, не отображается. Но я хочу, чтобы это было показано, как указано выше.

Я пытался использовать параметры onsubmit, onkeyup и onclick в методе проверки, но это не имело никакого смысла. Как я могу это обеспечить?


Бритва:

jQuery(function () {
    $.validator.setDefaults(
    $("#myform").validate({
        //onsubmit: false, ???
        //onkeyup: true, ???
        //onclick:true, ???
        onkeyup: function(element){this.element(element);},
        rules: {
            'Applicant.Name': "required",
            'Applicant.Surname': "required"
        },
        messages: {
            'Applicant.Name': "Please enter your Name",
            'Applicant.Surname': "Please enter your Surname"
        }
    })
); 

});

person Jack    schedule 11.12.2013    source источник
comment
пожалуйста, добавьте свой код селектора, тогда мы увидим, чего не хватает...   -  person Serdar    schedule 12.12.2013
comment
@SerdarBuyuktemiz: я добавил внизу вопроса.   -  person Jack    schedule 12.12.2013


Ответы (1)


Ваш код:

jQuery(function () {
    $.validator.setDefaults(
        $("#myform").validate({ .... })
    ); 
});

ВАЖНО: нельзя поместить метод .validate() внутрь .setDefaults(). Это не имеет смысла.

  • Метод .validate() предназначен для инициализации плагина (с параметрами) в форме.

  • Метод .validator.setDefaults() предназначен для установки параметров, которые будут применяться ко всем формам на странице, однако этот метод ничего не будет инициализировать.

Если вы хотите установить параметры для #myform, только используйте .validate()...

jQuery(function () {
    $("#myform").validate({
        // options only for #myform
    });
});

Если вы хотите настроить параметры для использования во всех формах на странице, используйте .validator.setDefaults(). Затем используйте .validate() в каждой форме...

jQuery(function () {

    $.validator.setDefaults({
        // options for all forms on page
    });

    $("#myform").validate({
        // options only for #myform
    });

    $("#myform2").validate({
        // options only for #myform2
    });

});

Операция плагина по умолчанию:

По умолчанию подключаемый модуль не выполняет никакой проверки "нажатием клавиши" до тех пор, пока после поле не будет первоначально проверено другим событием.

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

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

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

Ваш код:

//onsubmit: false, ???
//onkeyup: true, ???
//onclick:true, ???

Для этих параметров никогда не должно быть установлено значение true.

Документация:

onfocusout
Тип: Boolean или Function()
Проверка элементов (кроме флажков/переключателей) при размытии. Если ничего не введено, все правила пропускаются, за исключением случаев, когда поле уже было помечено как недействительное. Установите функцию, чтобы решить для себя, когда запускать проверку. Булево значение true не является допустимым значением.


onkeyup
Тип: Boolean или Function()
Проверка элементов при нажатии клавиши. Пока поле не помечено как недействительное, ничего не происходит. В противном случае все правила проверяются при каждом нажатии клавиши. Установите значение false, чтобы отключить. Установите функцию, чтобы решить для себя, когда запускать проверку. Булево значение true не является допустимым значением.


onclick
Тип: Boolean или Function()
Проверять флажки и переключатели при нажатии. Пока поле не помечено как недействительное, ничего не происходит. В противном случае все правила проверяются при каждом нажатии клавиши. Установите значение false, чтобы отключить. Установите функцию, чтобы решить для себя, когда запускать проверку. Булево значение true не является допустимым значением.


onsubmit
Тип: Boolean или Function()
Проверка формы при отправке. Пока поле не помечено как недействительное, ничего не происходит. В противном случае все правила проверяются при каждом нажатии клавиши. Установите значение false, чтобы отключить. Установите функцию, чтобы решить для себя, когда запускать проверку. Булево значение true не является допустимым значением.

person Sparky    schedule 11.12.2013
comment
Дорогой Спарки, Большое спасибо за прекрасные объяснения (я проголосовал за). Но моя потребность немного в другом. Не могли бы вы пересмотреть код, чтобы обеспечить этот сценарий? Когда пользователь напрямую нажимает на поле A, никакой проверки не будет. После нажатия на другое поле (или поле A потеряло фокус) поле A будет проверено (проверка не должна выполняться после каждого нажатия клавиши, это должно быть сделано после того, как связанный ввод потерял фокус). В дополнение к этому, если пользователь напрямую нажимает кнопку «Отправить», не нажимая ни на одно поле, все связанные поля должны быть проверены. Заранее спасибо. - person Jack; 15.12.2013
comment
@ Х.Джонсон, если проверка не должна выполняться при каждом нажатии клавиши, что произойдет, если вы просто установите для параметра onkeyup значение false? - person Sparky; 15.12.2013
comment
Вроде сработало. Но странно то, что хотя все правила проверки, правила сущности, класс и т. д. одинаковы для полей имени и фамилии, он работает с одним из них для первой проверки (щелкнув поле X и набрав что-то, затем сосредоточив внимание на другом поле и затем очистка текста в поле X). Я думаю, что это неизвестный симптом, поэтому я изучу проблему. Спасибо. - person Jack; 16.12.2013
comment
@ Х.Джонсон, пожалуйста, прочитайте ту часть моего ответа, которая объясняет поведение по умолчанию. - person Sparky; 16.12.2013
comment
Я попробовал модифицированную версию onkeyup по умолчанию, предоставленную вами, но это не сработало. Поэтому я дополнительно изменил его, и, случайно, он работает хорошо. Вот мой код: onkeyup: функция (элемент, событие) { if (element.value ===) { return; } еще { этот.элемент(элемент); } Спарки, не могли бы вы объяснить измененный код. - person Faiyaz Alam; 11.02.2015
comment
@ErFaiyazAlam, моя версия работает; он игнорирует проверку, когда поле пусто при использовании клавиши табуляции, в противном случае он проверяется немедленно при каждом нажатии клавиши. Другими словами, это точно то же самое, что встроено в подключаемый модуль, за исключением того, что оно не ленивое, а нетерпеливое. Ваша версия такая же, как и моя, за исключением того, что клавиша табуляции также вызывает проверку. Это вопрос предпочтений. - person Sparky; 11.02.2015
comment
@Sparky, спасибо за ваш ответ. В основном я хочу знать, что именно делает эта строка кода: event.what === 9 - person Faiyaz Alam; 12.02.2015
comment
@ErFaiyazAlam, поскольку это часть, которую вы удалили, ее цель раскрыта в моем предыдущем комментарии путем логического вывода. Это событие клавиши табуляции. - person Sparky; 12.02.2015
comment
@Sparky, да, я понял, спасибо за помощь. - person Faiyaz Alam; 12.02.2015