编程语言
首页 > 编程语言> > javascript – window.onbeforeunload在IE中触发部分回发事件

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

作者:互联网

如果他们在文本框中输入了某些内容,我想在浏览器的刷新或按下按钮时警告用户.所以我使用了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变量为true;
然后补充说

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 onl oad =“foo()”>

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

标签:jquery,javascript,internet-explorer,onbeforeunload,back-button
来源: https://codeday.me/bug/20190520/1143361.html