为什么通过客户端验证发送XmlHttpRequest失败?

时间:2011-01-12 17:16:28

标签: javascript asp.net jquery jquery-validate

我在页面上有很多AJAX表单,点击按钮我需要全部提交。常规** forms.each(函数(索引,表单){$(form).submit();}对我不起作用,因为这样只会最终提交最后一个表单。因此,我需要通过$ .ajax(...)。但我想启用提交,仅在表单有效

时启用

在“submitForms”上单击调用“submitTest”函数。 从jQuery文档中,如果表单是VALID,则会调用“submitHandler”。 因此,验证工作,如果表单是INVALID,则不调用“submitHandler”。但是,无论如何都会发送XmlHttpRequest,但不会调用“submitHandler”。

我的错误在哪里?或者还有其他方法吗? 谢谢

<% using (Ajax.BeginForm("FormPost", "Customer", null, new AjaxOptions() { HttpMethod = "POST" }, new { @class = "form-container" }))
       { %>

            <%: Html.TextAreaFor(m => m.Name, new { width = 440, height = 100 })%>
             <input type="button" value="submitForms" />
    <% }%>


<script type="text/javascript">
function submitTest(){
var forms = $(".form-container");

forms.each(function (index, form) {
    $(form).validate({
         submitHandler: function (form) {
                 $.ajax(
                 { 
                    ....
                 });
         }
    });
});

forms.each(function (index, form) {
     $(form).submit();
});
}
</script>

1 个答案:

答案 0 :(得分:0)

<强> EDITED

很可能是由于Ajax.BeginForm,因为它设置了onclick和onsubmit处理程序。在验证提交处理程序之前,可能会首先触发。

<强>更新 如果您希望在计划通过jQuery.ajax提交表单的模块中继续使用ajax表单,则可以执行以下操作。

$(function() {
   $('.form-container').removeAttr('onsubmit').removeAttr('onclick');
});

这将删除处理程序Ajax.BeginForm置于form标记。您需要一种不在其他模块中包含此脚本的方法。