jQuery Validator使用onsubmit = false和自定义submitHandler提交表单

时间:2014-11-19 18:24:10

标签: jquery asp.net-mvc jquery-validate unobtrusive-validation

在我的MVC项目(使用jQuery Unobtrusive Validation)中,我有一个包含多个表单的视图。我想阻止所有表单在有效时提交,而是做其他事情。

以下是其中一种表格的简短摘录:

@using (Html.BeginForm()
{
   @Html.LabelFor(m => m.Name)
   @Html.TextBoxFor(m => m.Name)
   // etc.

在我的Javascript验证配置中,我添加了onsubmit: falseignore: []和自定义submitHandler - 但我的表单仍在提交。

$.validator.setDefaults({
    debug: false,
    onsubmit: false,
    ignore: [],
    submitHandler: function (event) {
        event.stopPropagation;
        console.log("Form submission prevented.");
    }
});

我也试过这样的事情失败了:

$('form').each(function () {
    $(this).validate({
        debug: false,
        onsubmit: false,
        ignore: [],
        submitHandler: function (event) {
            event.stopPropagation;
            console.log("Form submission prevented.");
        }
    })
});

为什么我的表单仍在提交?

1 个答案:

答案 0 :(得分:1)

引用OP

  

"我们的想法是阻止所有表单在有效时提交,并执行其他操作。"

然后你只需要这个......

submitHandler: function(form) { // <- argument is 'form' object only!
    // do something else, (or ajax)
    return false;
}

但是,由于您通过unobtrusive验证使用了MVC框架,因此构建并自动调用jQuery Validate&#39; .validate()方法。

您必须在 之前致电.setDefaults() 您的ASP框架调用.validate()

有些人通过将.setDefaults() 放在的文档就绪函数中来取得成功。

另见:https://stackoverflow.com/a/12305576/594235


<强>侧面注意

您也无法在任何类型的函数中放置.stopPropagation(它真的.stopPropagation();请注意缺少())。