Настройка делегатов событий в подключаемом модуле проверки jQuery - PullRequest
7 голосов
/ 04 мая 2010

В настоящее время я устанавливаю подключаемый модуль проверки jQuery для использования в нашем проекте.

По умолчанию некоторые события автоматически настраиваются для обработки. То есть фокусировка вход / выход, ключевые события на всех входных проверках. Я хочу, чтобы он срабатывал только при нажатии кнопки отправки.

Эта функциональность, кажется, встроена в плагин, что затрудняет это (без изменения кода плагина, а не того, что я хочу сделать).

Я нашел вызовы функции eventDelegate в методе прототипа кода плагина:

        $(this.currentForm)
            .validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate)
            .validateDelegate(":radio, :checkbox, select, option", "click", delegate);

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

Кто-нибудь может мне помочь? Если вам нужно больше деталей, пожалуйста, дайте мне знать. Я искал Google с небольшим успехом.

Спасибо

EDIT : Я в основном пытаюсь проверить форму только при отправке события submit. По умолчанию плагин проверяет каждый раз, когда фокус теряется в элементе управления вводом.

1 Ответ

7 голосов
/ 04 мая 2010

Нашел ответ.Он был (скрыт?) Как часть параметров метода validate.

См. Параметры onfocusout и т. Д. На этой странице: http://docs.jquery.com/Plugins/Validation/validate#options

, которые я могу установить в значение false.

Вот мой код, который устанавливает мой валидатор (надеюсь, другие сочтут это полезным):

$(document).ready(function() {
    $("form").each(function() {
        $(this).validate({
            validateDelegate: function() { },
            onsubmit: true,
            onkeydown: false,
            onkeyup: false,
            onfocusin: false,
            onfocusout: false,

            errorContainer: "#PanelError",
            errorLabelContainer: "#PanelError ul",
            wrapper: "li",
            ignoreTitle: true,
            errorClass: "Error",

            highlight: function(element, errorClass, validClass) {
                $(element).addClass(errorClass).removeClass(validClass);
                $(element.form).find("#" + element.id)
                        .addClass(errorClass);
            },
            unhighlight: function(element, errorClass, validClass) {
                $(element).removeClass(errorClass).addClass(validClass);
                $(element.form).find("#" + element.id)
                        .removeClass(errorClass);
            }
        });
    });
});
...