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;
});
}
}
和
对于 body 标签 onload 方法,我分配了 foo() 方法。
<body onload="foo()">
这个黑客在 IE 和所有浏览器上都可以正常工作:) 谢谢