0

I'm trying to trigger the OnBeforePageUnload only when the user closes the tab or browser window. When the user navigates on my website, I have a custom mechanism that will trigger a warning dialog to prevent the user from losing entered data. So every time a link on my page has been clicked, I set the a flag:

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

Then, the onbeforepageunload event is triggered. I check the value of the flag to see if I should show the built in onbeforeunload dialog or not:

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

This works fine for all my links on the page except for the following one:

 <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>

These html is created by a custom web control. When i click on the link, i get redirected to the otherPage without the click event has been triggered. So i cannot set the flag and the built in onbeforeunload message is shown.

When I add an inline add the onclick attribute directly in the control like this:

 <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>

Everything works fine. But that's not the way i want to resolve this.

Can someone explain to me what mistake i'm making here?

I have been looking and trying a lot of code but with no success.

I found this post Preventing Links before jQuery is Loaded but i don't know if this has anything to do with my problem because i only have it with one link.

Thanks in advance for any help.

4

2 に答える 2

3

HTML はカスタム Web コントロールによって作成される ため、クリック イベントをバインドするには、JQuery 1.7以降ではlive()またはを使用する必要がある場合があります。on()

例えば:

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

jquery バージョン 1.7 からは、次のように使用します。

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

JQueryライブ()

ここでオンラインの例を見る

于 2012-03-27T12:23:09.157 に答える
0

まず第一に、コードを次のようにリファクタリングできます。

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

あなたの答えはおそらく次のとおりです。

これらの html は、カスタム Web コントロールによって作成されます

jQuery クリック ハンドラが呼び出されないようにクリック イベントをハイジャックするか、内部<span>要素でクリック イベントを使用します。

firebug または chrome 開発者ツールを使用して、すべてのイベント リスナーを確認できます。それらの 1 つが jQuery であることを確認してください。

于 2012-03-27T12:17:47.047 に答える