Параметры проверки jQuery не применяются - MVC4

Я делаю ненавязчивую проверку формы в MVC 4 и пытаюсь показать ошибки во всплывающем окне, а не на странице. Я тестирую опцию showErrors и invalidHandler, но события никогда не запускаются.

Когда страница готова, этот js вызывается для инициализации валидатора.

$("form").validate({
    showErrors: function (errorMap, errorList) {
        console.warn(errorList);
    },
    invalidHandler: function (event, validator) {
        alert('test');
    }
});

Когда пользователь нажимает кнопку «Отправить», происходит проверка, и на странице отображаются ошибки, но я ничего не вижу в консоли браузера и не вижу всплывающего окна с предупреждением.

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

$('form').validate().settings

Помощь приветствуется.


person user1791567    schedule 04.11.2013    source источник


Ответы (2)


Однажды у меня было подобное требование: я добавлял класс всплывающих окон js из всплывающих окон jquery и добавлял его только к недопустимому элементу.

Если вы обратитесь к методу errorPlacement, у вас есть доступные переменные элемента и ошибки. Вы можете добавить всплывающий класс js к элементу. Метод errorPlacement вызывается только для элементов, которые являются недопустимыми на основе правил проверки, которые вы написали, и здесь вы можете контролировать, где появляется встроенное сообщение проверки и где появляется всплывающее сообщение.

person Sam Thadhani    schedule 04.11.2013
comment
я думаю, что $.validator вызывается MVC до того, как страница будет готова, поэтому последующие инициализации игнорируются, поскольку плагин jquery validate имеет следующую строку // проверить, был ли уже создан валидатор для этой формы var validator = $.data(this[0 ], 'валидатор'); если (валидатор) { вернуть валидатор; } Вы не можете изменить параметры валидатора после его инициализации. - person user1791567; 04.11.2013
comment
@ user1791567, вы правы. Вы не можете изменить параметры, снова вызвав .validate(). Из того, что я видел, другие, использующие MVC, используют метод setdefaults. См. документы. - person Sparky; 04.11.2013

Итак, вот как я решил свою проблему.

Я понял, что MVC вызывал валидатор раньше меня, и поскольку плагин возвращает валитарор, если вы вызываете его снова с новыми параметрами, поэтому параметры никогда не применяются к настройкам валидатора. Также я не хотел применять свои настройки ко всем валидаторам, так что вот.

//-- Validator settings. At this point this validator is already created (for me)
var $vlt = $('form').validate(); // Get validator

 var options = { //-- new options
            onfocusout: false, 
            onkeyup: false, 
            onclick: false,            
            showErrors: function (errorMap, errorList) {
                console.warn(errorList);
    }
 };

 $vlt.settings = $.extend(true, {}, $vlt.settings, options); // apply options

Я поместил этот скрипт в блок $().ready в частичном представлении.

person user1791567    schedule 04.11.2013