window.onbeforeunload 函数无法在 IE 中正确执行。因为一些部分回发也被认为是“试图离开页面”。
如果页面上的链接具有 href="javascript:...." (ASP.Net LinkButton 是这样呈现的),则 IE 在单击链接时会错误地触发窗口卸载事件。
所以,我保留了一个dirtyflag变量并添加了
var __ignoreDirtyFlag = false;
$(document).ready(function () {
if ($.browser.msie) {
$('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function () {
__ignoreDirtyFlag = true;
});
}
});
现在当页面加载时,以 href^="javascript:" 开头的链接将分配该功能。当点击链接时,它使 __ingoreDirtyFlag 变量为真;
然后加了
window.onbeforeunload = function globalWindowUnload() {
if (!__ignoreDirtyFlag && isDataFilled == true) {
return "You have unsaved changes on this page. If you leave this page, those changes will be lost.";
}
__ignoreDirtyFlag = false;
return;
};
如果您在您的页面中使用了任何asp更新面板,则上述与链接的函数绑定将被删除。
所以我们必须在更新面板刷新时再次绑定函数到链接。
所以,
function foo() {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
}
function endRequestHandler(sender, args) {
// Do your stuff
if ($.browser.msie) {
$('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function () {
__ignoreDirtyFlag = true;
});
}
}
和
对于正文标签的加载方法,我分配了 foo() 方法。
<body onload="foo()">
这个 hack 在 IE 和所有浏览器上都能正常工作 :)
谢谢