使用jquery.validate1.8.1)库和ASP MVC3 RTM jquery.validate.ubobtrusive库,我想知道是否有可用的钩子,可以在其中插入一些其他逻辑以进行验证后,但是要在实际形式之前进行。已提交。

换句话说:正在提交表单,运行验证(执行其通常的操作),验证没有理由停止提交表单,在此处运行我的代码,然后按常规提交。

我知道我可以处理表单的submit事件并执行以下操作:

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

    // My Code Here
}


...自己打电话给验证,然后,如果成功,请输入我自己的逻辑。但是我觉得这很脏。我怎么知道这是jquery.validate的提交处理程序中唯一的代码?即使这是唯一运行的代码,我真的要复制它吗?我宁愿不必镜像验证库在提交时所做的工作。我只想在验证发生之后但在表单提交之前注入自己-就像绑定到神话般的$('#MyForm').lastPossibleMomentBeforeSubmit(function() { // My Code Here });
事件。

关于“我的代码在这里”应该在哪里的任何指针?

最佳答案

如果您只是使用jquery.validate,则可以使用成功调用,如下所示:

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


但是,由于您正在使用jquery.validate.ubobtrusive,因此遗憾的是,这无法直接完成,因为jquery.validate.ubobtrusive在内部隐藏了对.validate的调用。

相反,您需要获取jquery.validate.ubobtrutru传递给.validate的settings / options对象,捕获其现有的成功处理程序,并将其替换为自己的调用原始处理程序并具有如下附加功能的处理程序:

$(function () {
            var settings = $('form').data('validator').settings,
                originalSuccess = settings.success;
            settings.success = function (error) {
                originalSuccess(error);
                // additional logic
            };
        });

10-07 19:56
查看更多