MVC3 После ненавязчивой проверки клиента, но перед отправкой Доступен ли крюк? - PullRequest
2 голосов
/ 13 июня 2011

Используя библиотеку jquery.validate ( 1.8.1 ) и библиотеку ASP MVC3 RTM jquery.validate.ubobtrusive, мне интересно, есть ли доступный хук, где можно было бы добавить некоторую дополнительную логику, чтобы произойти после-validation, но перед отправкой фактической формы.

Другими словами: форма отправляется, проверка выполняется (делает то, что обычно делает), проверка не находит причин, чтобы помешать отправке формы, Запустите мой код здесь , затем отправьте как обычно.

Я знаю, что могу обработать событие submit формы и сделать что-то вроде:

$('#MyForm').submit(function() {
    if (!$(this).valid())
       return false;

    // My Code Here
}

... вызовсаму проверку, а затем, в случае успеха, вставьте мою собственную логику.Но я чувствую, что это грязно.Как мне узнать, что это единственный код, выполняемый в обработчике отправки jquery.validate?Даже если это единственный запущенный код, действительно ли я хочу его дублировать?Я бы предпочел не отражать действия библиотеки проверки при отправке;Я просто хотел бы сделать инъекцию после проверки, но до того, как форма будет отправлена ​​- как привязка к мифическому событию $('#MyForm').lastPossibleMomentBeforeSubmit(function() { // My Code Here });.

Есть ли какие-нибудь указатели на то, куда должен идти этот «Мой код здесь»?

Ответы [ 2 ]

1 голос
/ 22 февраля 2013

Если бы вы просто использовали jquery.validate, вы могли бы использовать обратный вызов success следующим образом:

$(function () {
    $('#MyForm').validate({
       success : function(error) {
           // additional logic
       }
    });
});

Однако, поскольку вы используете jquery.validate.ubobtrusive, к сожалению, это нельзя сделать напрямую, потому что jquery.validate.ubobtrusive скрывает от вас вызов .validate от вас.

Вместо этого вам нужно получить объект настроек / опций, который jquery.validate.ubobtrusive передал в .validate, захватить его существующий обработчик успеха и заменить его своим собственным, который вызывает оригинал и имеет собственные дополнительные функции, такие как:

$(function () {
            var settings = $('form').data('validator').settings,
                originalSuccess = settings.success;
            settings.success = function (error) {
                originalSuccess(error);
                // additional logic
            };
        });
0 голосов
/ 13 июня 2011

Полагаю, вы можете сделать что-то подобное.

$(document).ready(function() {
    $("#MyFormform").validator().bind("onSuccess", function(e, els) {
         //Code to run after validation succeeds
    }
});
...