5

如果用户在文本框中输入了某些内容,我想在刷新或按浏览器的返回按钮时警告用户。所以我使用了 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 中的错误而发生的
4

3 回答 3

5

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 更新面板,则上述与链接的函数绑定将被删除。所以我们必须在更新面板刷新时再次将函数绑定到链接。

所以,

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 和所有浏览器上都可以正常工作:) 谢谢

于 2013-02-13T09:22:20.753 回答
0

`var inFormOrLink = false; var url_auth = ''; var __ignoreDirtyFlag = false;

document).ready(function () {

if ($.browser.msie) {
    $('').bind('click.ignoreDirtyFlag', function () { __ignoreDirtyFlag = true; alert("teste luiz") });

    window.onbeforeunload = function () {
        if (!__ignoreDirtyFlag) {
            return "Tem certeza que deseja encerrar a sessão TESTE LUIZ?";
        }
        __ignoreDirtyFlag = false;
        return;
    };
}
else {
    $('*').live('click', function () { inFormOrLink = true; alert("Passou aqui 1 LUIZ"); });
    $('*').bind('submit', function () { inFormOrLink = true; alert("Passou aqui 2"); });
    window.onbeforeunload = function () {
        if (!inFormOrLink) {

            if (window.location.href.indexOf("DEV2") != -1) {
                $.post("/DEV2/SSQ/AUTH/LOGOUT", null);
                return 'Tem certeza que deseja encerrar a sessão TESTE DEV2?';
            }`
于 2017-01-05T13:24:02.680 回答
0

目的是在用户关闭浏览器或手动更改目标 url 时注销用户

var url_auth = '';var __ignoreDirtyFlag = false;$(document).ready(function () {if ($.browser.msie) {$('a').live('click', function () { __ignoreDirtyFlag = true;}); $('*').bind('submit', function () { __ignoreDirtyFlag = true; });window.onbeforeunload = function () {if (!__ignoreDirtyFlag) {if (window.location.href.indexOf("DEV2") != -1) {$.post("/DEV2/SSQ/AUTH/LOGOUT", null);return 'Tem certeza que deseja encerrar a sessão ?';}}};
于 2017-01-05T18:28:57.430 回答