如何在JQuery中区分成功提交和失败提交



我在一个遗留的ASP.NET/MVC项目中工作,该项目使用了一点jQuery来提供未保存的更改警告。有一个utils.js文件包含在每个包含以下内容的页面上:

// Has the user made changes on the form?
var formHasModifications = false;
$(document).ready(function () {
// We want to trigger the unchanged dialog, if the user has changed any fields and hasn't saved
$(window).bind('beforeunload', function () {
if (formHasModifications) {
return "You haven't saved your changes.";
}
});
// If a field changes, the user has made changes
$("form:not(.noprompt)").change(function (event) {
formHasModifications = true;
});
// If the form submits, the changes are saved
$("form:not(.noprompt)").submit(function (event) {
formHasModifications = false;
});
// $(document).ready() may make changes to fields, so we need to clear the flag
// immediately after it returns
setTimeout(function() {
formHasModifications = false;
}, 1);
});

问题是什么?submit((事件在每次提交时都会触发并被捕获,包括在实际没有提交数据的提交时。

也就是说,如果存在验证错误,单击提交按钮会让用户留在页面上,并显示未保存的更改和验证失败消息,但也会清除formHasModifications标志。

结果是如果用户对一个或多个输入进行改变;提交";,得到验证错误,然后导航到另一个页面而不修复它们,然后重新提交,它们确实没有看到未保存的更改对话框,即使它们确实有未保存的修改。

正如我所说,这是一款遗留应用程序,我对进行根本性的结构更改不感兴趣。但是,如果在jQuery中有某种方法可以判断提交事件是成功还是失败,我真的很想知道。

好吧,正如Terry所指出的,这取决于我们用于验证的内容。

在我们的例子中,我们使用的是jquery.validate。有了这个,我们可以对表单调用.valid((来确定表单是否通过了验证:

// If the form successfully submits, the changes are saved
$("form:not(.noprompt)").submit(function (event) {
if ($(this).valid()) {
formHasModifications = false;
}
});

最新更新