0

我试图仅在用户关闭选项卡或浏览器窗口时触发 OnBeforePageUnload。当用户在我的网站上导航时,我有一个自定义机制会触发一个警告对话框,以防止用户丢失输入的数据。所以每次点击我页面上的链接时,我都会设置 a 标志:

$('a[href]').click(function (event) {
    buttonOutsidePageClicked = false;
});

然后,触发 onbeforepageunload 事件。我检查标志的值,看看是否应该显示内置的 onbeforeunload 对话框:

function OnBeforeUnload(oEvent) {
if (buttonOutsidePageClicked)
    return navAwayMessage;   
}

这适用于页面上的所有链接,但以下链接除外:

 <a id="cpm_UploadLink" class="button" rel="no" href="/pages/otherPage">
    <span class="btnLeft"></span>
    <span class="btnMiddle">Click Me</span>
    <span class="btnRight"></span>
 </a>

这些 html 是由自定义 Web 控件创建的。当我点击链接时,我被重定向到 otherPage 而没有触发点击事件。所以我无法设置标志并显示内置的 onbeforeunload 消息。

当我添加内联时,直接在控件中添加 onclick 属性,如下所示:

 <a id="cpm_UploadLink" class="button" rel="no" href="/pages/otherPage"
     onclick="javascript:buttonOutsidePageClicked = false;">
        <span class="btnLeft"></span>
        <span class="btnMiddle">Click Me</span>
        <span class="btnRight"></span>
 </a>

一切正常。但这不是我想要解决这个问题的方式。

有人可以向我解释我在这里犯了什么错误吗?

我一直在寻找并尝试很多代码,但没有成功。

我发现这篇文章在加载 jQuery 之前阻止链接, 但我不知道这是否与我的问题有关,因为我只有一个链接。

提前感谢您的帮助。

4

2 回答 2

3

由于您的 html 是由自定义 web 控件创建的,因此您可能需要使用live()oron() 用于 JQuery 1.7 及更高版本来绑定您的点击事件。

例如:

$("body").delegate("a","click", function () {
        buttonOutsidePageClicked = false;
    });

从 jquery 1.7 版开始使用:

$("body").on("click", "a", function () {
    buttonOutsidePageClicked = false;
});

jQuery live()

在此处查看在线示例

于 2012-03-27T12:23:09.157 回答
0

首先:您可以将代码重构为:

$('a[href]').click(function (event) {
    buttonOutsidePageClicked = false;
});

你的答案可能在于:

这些 html 是由自定义 Web 控件创建的

他们要么劫持 click 事件,以便不调用 jQuery click 处理程序,要么在内部<span>元素上使用 click 事件。

您可以使用 firebug 或 chrome 开发人员工具查看所有事件侦听器。确保其中之一是 jQuery。

于 2012-03-27T12:17:47.047 回答