2

使用jquery.validate1.8.1)库和ASP MVC3 RTM jquery.validate.ubobtrusive库,我想知道是否有一个可用的钩子,其中可以注入一些额外的逻辑来发生后验证,但在提交实际表单之前。MVC3 Post Unobtrusive客户端验证,但提交之前钩可用?

换句话说:被提交表单,确认运行(这样做不管它一般不会),验证发现没有理由从停止提交表单,我的代码运行在此,然后提交正常。

我知道我可以处理表单的submit事件,这样做:

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

    // My Code Here 
} 

...调用验证自己,然后,如果成功的话,把我自己的逻辑。但我觉得这很肮脏。我如何知道这是jquery.validate提交处理程序中唯一的代码?即使这是唯一的代码运行,我真的想要复制它吗?我宁愿不必反映验证库提交的内容;我只想在验证发生后注入自己,但在表单提交之前注入自己 - 例如绑定到神话故障$('#MyForm').lastPossibleMomentBeforeSubmit(function() { // My Code Here }); 事件。

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

回答

-1

我相信你可以做这样的事情。

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

不确定你在这里引用了什么框架。你有这个onSuccess方法文档的链接吗?做$('#MyForm')。validator()是一个错误,所以我不确定你在这里得到什么。你确定这是为jquery.validate/jquery.validate.ubobtrusive吗? – ckittel 2011-06-13 15:40:41

1

如果你只是使用jquery.validate您可以使用成功回调是这样的:

$(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 
      }; 
     });