gpt4 book ai didi

ASP.NET、jQuery、脏表单和 window.onbeforeunload

转载 作者:行者123 更新时间:2023-12-03 22:15:10 25 4
gpt4 key购买 nike

在我的 ASP.NET Web 应用程序中,我尝试使用 jQuery 创建一种通用方法,在用户进行更改后离开表单之前向用户发出警告。相当标准的东西,但经过大量搜索后,我还没有找到可行的技术。

这是我目前所拥有的:

    addToPostBack = function(func) {
var old__doPostBack = __doPostBack;
if (typeof __doPostBack != 'function') {
__doPostBack = func;
} else {
__doPostBack = function() {
old__doPostBack();
func();
}
}
}

var isDirty = false;

$(document).ready(function() {
addToPostBack(function() {
alert("Postback detected.")
clearDirty();
});
$(':input').bind("change select keydown", setDirty);
window.onbeforeunload = function(e) {
var msg = "You have unsaved changes. "
if (isDirty == true) {
var e = e || window.event;
if (e) { e.returnValue = msg; }
return msg;
}
};
});

setDirty = function() {isDirty = true;}

clearDirty = function() {isDirty = false;}

这可以警告用户不要离开。问题是我在每次同一页面回发时都会收到警告。我的表单上有很多内容可能会触发回发:

  1. 页面上有保存、取消和删除链接按钮
  2. 页面上可能有其他链接按钮,它们在同一页面上执行服务器端功能
  3. 可能还有其他带有 autopostback=true 的控件,它们也附加了服务器端功能,但不会导致用户离开页面。

这些事情都不会引发警告,因为用户不会离开页面。我的代码尝试劫持 addToPostBack ( more details on that in this question ) 以在回发之前清除 isDirty 位,但问题是在 IE 中 onbeforeunload 在 __doPostBack 之前触发,显然是因为 IE 在单击链接时立即触发 onbeforeunload (as described here)。

当然,我可以连接每个控件来清除 isDirty 位,但我更喜欢在表单级别上运行的解决方案,并且不需要我触摸可能触发回发的每个控件。

是否有人有一种在 ASP.NET 中有效且不涉及连接可能导致回发的每个控件的方法?

最佳答案

我在 Google 搜索在 MVC 中执行相同操作的解决方案时看到了这篇文章。这个解决方案改编自 Herb 的上述解决方案,似乎效果很好。由于这与 MVC 无关,因此它应该同样适用于 PHP、经典 ASP 或使用 HTML 和 JQuery 的任何其他类型的应用程序。

var isDirty = false;

$(document).ready(function () {
$(':input').bind("change select keydown", setDirty);
$('form').submit(clearDirty);

window.onbeforeunload = function (e) {
var msg = "You have unsaved changes. "
if (isDirty == true) {
var e = e || window.event;
if (e) { e.returnValue = msg; }
return msg;
}
};
});

setDirty = function () { isDirty = true; }
clearDirty = function () { isDirty = false; }

关于ASP.NET、jQuery、脏表单和 window.onbeforeunload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1235024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com