переопределение функции в плагине проверки jquery

Я использую плагин проверки формы jquery для проверки длинной формы. Если пользователь отправляет форму с несколькими полями, которые не прошли проверку, курсор возвращается к последнему непрошедшему полю. Вместо этого я хочу, чтобы курсор возвращался к первому полю в форме, которая не прошла проверку. Вместо того, чтобы изменять плагин, я хотел бы переопределить focusInvalid, который вложен в «прототип: {...}»:

focusInvalid: function() {
    if( this.settings.focusInvalid ) {
        try {
            $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
        } catch(e) {
            // ignore IE throwing errors when focusing hidden elements
        }
    }
},

Я попытался добавить свою собственную версию focusInvalid в следующем, но мне не удалось заставить это работать:

$("form#user-register").validate({. . .});

Любые указатели?


person Matt V.    schedule 02.08.2009    source источник


Ответы (1)


Вы можете отключить выбор первого недопустимого ввода с помощью опции focusInvalid. Затем вы можете использовать параметр invalidHandler, чтобы установить пользовательскую функцию, которая выбирает первый элемент в вашей форме. Опция invalidHandler — это функция, которую плагин вызывает при отправке недопустимой формы.

Пример ниже:

$("form#user-register").validate({
     invalidHandler: function(form, validator){
         $(validator.invalidElements()[0]).focus();
     },
     focusInvalid:false
});
person MitMaro    schedule 02.08.2009
comment
Спасибо, я не знал о invalidHandler. Приведенный выше код близок к тому, что мне нужно; однако я бы хотел, чтобы пользователь возвращался к первому недействительному полю. Я думал, что это будет что-то вроде: ‹pre›‹code› invalidHandler: function(){ $(this.errorList[0].element).filter(:visible).focus(); }, focusInvalid: false ‹/pre›‹/code› . . . но я не смог заставить это работать. Есть еще пункты? Спасибо! - person Matt V.; 06.08.2009
comment
Обновлено. Вы были на правильном пути в том, что вы делали. Вы по-прежнему можете использовать фильтр :visible, если хотите, но он понадобится только в том случае, если вы проверяете скрытые входные данные. - person MitMaro; 06.08.2009
comment
Это именно то, что мне было нужно. Большое спасибо! - person Matt V.; 07.08.2009