如果您谈论的是 ASP.NET AJAX 部分回发,那么我今天也遇到了这种行为,做同样的事情。(如果不是,请完全忽略我的帖子。)
以我目前的经验来看,如果你的部分回发是由一个input触发的,它不会在部分回发期间触发 onbeforeunload ,但如果部分回发是由一个hyperlink触发的,它会。如果您单击锚标记中的任何内容(仅在 IE 和 FireFox 中测试过,但是是的),浏览器似乎会假定您正在导航。
页面是否具有某个隐藏字段已经是我用来确定客户端何时适合显示导航离开警告的方法,因此我可以通过添加对隐藏字段值的检查来非常简单地解决此问题我的 onbeforeunload 的 if 条件,并连接到 PageRequestManager 的 BeginRequest 和 EndRequest 处理程序以设置值。这有效地禁用了部分回发期间的警告。如果您想要检查更具体的事情,您可以在此处添加更复杂的逻辑。
这是一个非常简化的代码示例。(对不起,如果我削减和审查到它不起作用的地步,但它应该给你一个想法。)
window.onbeforeunload = checkNavigateAway;
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(onBeginRequest);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest);
function onBeginRequest(sender, args) {
var navigateAwayFlag = $("input[id*='navigateAwayValue']");
if (navigateAwayFlag.length > 0) {
navigateAwayFlag[0].value = "false";
}
}
function onEndRequest(sender, args) {
var navigateAwayFlag = $("input[id*='navigateAwayValue']");
if (navigateAwayFlag.length > 0) {
navigateAwayFlag[0].value = "true";
}
}
function checkNavigateAway() {
var navigateAwayFlag = $("input[id*='navigateAwayValue']");
if (navigateAwayFlag.length > 0 && navigateAwayFlag[0].value == "true")
{
return "Warning Text";
}
}
编辑:坏消息。以上似乎不适用于IE6。似乎它以与 Firefox 不同的顺序触发事件,因此 onbeforeunload 在 AJAX beginRequest 之前触发......可能必须找到一种方法来通过在 onbeforeunload 触发之前单击超链接来更改标志的值。