gpt4 book ai didi

javascript - window.onbeforeunload 在 IE 中触发部分回发事件

转载 作者:搜寻专家 更新时间:2023-11-01 04:10:03 25 4
gpt4 key购买 nike

如果用户在文本框中输入了一些内容,我想在浏览器刷新或按下后退按钮时警告用户。所以我使用了 window.onbeforeunload 函数来完成它。

window.onbeforeunload = function () {
if (if user hasn't entered any thing) {
return;
}
return 'Entered data will be lost.';
};

此 javascript 代码在 Firefox 和 chrome 中运行良好。但在 IE 中,此函数会触发带有部分回发的按钮。在 IE 中克服这个问题的任何解决方案?谢谢:)

  • 是因为IE的Bug造成的

最佳答案

window.onbeforeunload 函数无法在 IE 中正确执行。因为一些部分回发也被认为是“试图离开页面”。如果页面上的链接有 href="javascript:...."(ASP.Net LinkBut​​ton 是这样呈现的),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 更新面板,则上述绑定(bind)到链接的功能将被删除。所以我们必须在更新面板刷新时再次将函数绑定(bind)到链接。

所以,

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()">

这个 hack 在 IE 和所有浏览器上运行良好:)谢谢

关于javascript - window.onbeforeunload 在 IE 中触发部分回发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14847407/

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