Как заставить jQuery Validate запускать «успешный» метод «onchange» вместо «onblur» для выбранных меню?

#jquery #jquery-plugins #jquery-validate #onchange #onblur

#jquery #jquery-плагины #jquery-validate #onchange #onblur

Вопрос:

Я использую подключаемый модуль jQuery validate. Я использую show() метод для отображения кнопки отправки, как только на странице нет ошибок.

У меня есть форма, в которой есть только одно меню выбора / выпадающего списка. Проблема, с которой я сталкиваюсь, заключается в том, что когда я выбираю опцию в меню выбора, кнопка отправки не отображается, пока я не нажму где-нибудь еще на странице, тогда как она должна отображаться, как только я выбираю допустимую опцию.

Кто-нибудь знает, как заставить его запускать success() onchange or onkeyup вместо onblur ?

Вот базовый пример того, что я делаю:

 $form.validate( {
    rules: {
        favoriteSport: {
            required: true
        }
    },
    messages: {
        favoriteSport: "This is required"
    },
    success: function() {
        console.log("yay, it was valid!");

        $("#submit").show();
    }
});
  

Комментарии:

1. вам следует рассмотреть возможность публикации части кода, который вы пробовали…

2. Я только что опубликовал некоторый код.

3. как вызвать функцию validate .. опубликовать это в (HTML-код)

Ответ №1:

В итоге я добавил отдельный вызов bind(), поэтому всякий раз, когда происходит событие изменения, он запускает $validate() для получения идентификатора выбранного меню.

Трудно поверить, что это не встроено в плагин, учитывая, что это самый популярный плагин проверки формы для jQuery.

Вот пример:

 $("#favoriteSport").bind("change keyup", function() {
    $form.validate().element("#favoriteSport");
});
  

Комментарии:

1. Это немного неэффективно, я бы хотел, чтобы кто-нибудь другой ответил на этот вопрос, поэтому, пожалуйста, оставьте его открытым на некоторое время, если вы не возражаете. Я согласен, для этого должна быть опция для выбора, которую вам не нужно вызывать явно. Другие поля будут проверяться при вводе ключа. Просматривая документы, кажется, что для <select> полей нет опций… Однако хороший трюк!

2. Спасибо за интерес и более подробное изучение. Я также хотел бы увидеть лучшее решение! 🙂

Ответ №2:

попробуйте это .change() вместо .blur() ….

 $("#idofSelect").change(function(){

  $("#submitButtonID").show()

})
  

Комментарии:

1. Я не вызываю blur (), я использую jQuery Validate ( docs.jquery.com/Plugins/Validation/validate#options ) и я использую $ («форма»).validate();

2. @Cofey: покажите нам часть вашего кода, который вы сделали… это может помочь

3. он использует популярный плагин проверки jquery, который по умолчанию проверяет поля при размытии. Он хочет изменить поведение по умолчанию. Обычно вы не вызываете методы проверки вручную, поэтому, вероятно, нет другого кода для работы, кроме самого плагина.

4. @Madmartigan: он может вызвать этот метод onchange из select , если есть только одно поле со списком для проверки

Ответ №3:

Прошло много времени с тех пор, как был задан этот вопрос, и я все еще не верю, что разработчик плагина предоставил встроенное исправление этой проблемы. @Cofey вы были на правильном пути, и я думаю, что небольшое улучшение логики вашего ответа помогло бы сделать решение динамичным для всех выбранных:

 $('select').bind('change keyup', function() {
    $('form').validate().element(this);
});