在我的MVC项目(使用jQuery Unobtrusive Validation)中,我有一个包含多个表单的视图。我想阻止所有表单在有效时提交,而是做其他事情。
以下是其中一种表格的简短摘录:
@using (Html.BeginForm()
{
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
// etc.
在我的Javascript验证配置中,我添加了onsubmit: false
,ignore: []
和自定义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.");
}
})
});
为什么我的表单仍在提交?
答案 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()
;请注意缺少()
)。
"event"
NOT 是开发人员为此回调函数提供的有效参数。它是"form"
,它只代表表单对象。您可以将"form"
更改为"event"
或任何其他字词,但它仍然代表表单对象。