Как отключить кнопку отправки формы, если есть ошибки проверки DataAnnotation? - PullRequest
1 голос
/ 15 августа 2011

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

Я использую MVC 2 с атрибутами DataAnnotation на моей виртуальной машине.

1 Ответ

1 голос
/ 15 августа 2011

Вот кое-что, что я только что взломал, который оборачивает оригинальные функции parseElement и invalidHandler, позволяя вам добавить свою собственную логику.

(function($) {
    $.validator.unobtrusive.parseElement = (function (original) {
        return function (element, skipAttach) {
            original.call(this, element, skipAttach);
            var form = $(element).parents("form:first")[0];
            var validationInfo = $(form).data('unobtrusiveValidation');
            if (validationInfo) {
                var handler = validationInfo.options.invalidHandler;
                var newhandler = function () {
                    console.log('Here is where you can do additional handling');
                    handler.call(this);
                };
                validationInfo.options.invalidHandler = $.proxy(newhandler, form);
            } else {
                // this didn't work.
            }
        }
    })($.validator.unobtrusive.parseElement);
})(jQuery);

Обратите внимание, что это непосредственная функция, а не функция jQuery, которая эквивалентна document.onload.

Это , заменяющий $.validator.unobtrusive.parseElement новой функцией, которая вызывает оригинал, чтобы гарантировать, что validationInfo.options.invalidHandler применяется к родительской форме, которая затем позволяет вам обернуть этот обработчик newhandler функция.

Изменить: Приведенный выше ответ будет работать только для MVC3 и ненавязчивой проверки.

Для выполнения некоторых дополнительных функций с $.validator, когда форма недействительна ...

$('form:first').bind("invalid-form.validate", function () { 
    alert("invalid!"); 
 });
...