0

私はOnBeforePageUnloadをトリガしようとしているのは、ユーザがタブまたはブラウザウィンドウを閉じるときだけです。ユーザーが自分のウェブサイトをナビゲートすると、ユーザーが入力したデータを失うのを防ぐための警告ダイアログが表示されます。htmlアンカー要素に対してjqueryのクリックイベントが発生する前にリダイレクトが発生するのはなぜですか?

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

その後、onbeforepageunloadイベントがトリガされます。だから私のページ上のリンクがクリックされたたびに、私はフラグを設定します。

<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> 
:1次

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

これは、以外のページ上のすべての私のリンクのために正常に動作します:私は、私はonbeforeunloadダイアログに組み込まれてか示すべきであるかどうかを確認するためにフラグの値をチェックします

これらのhtmlはカスタムWebコントロールによって作成されます。リンクをクリックすると、clickイベントが発生せずに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> 

すべてが正常に動作します。しかし、これは私がこれを解決したいのではありません。

誰かが私がここで間違いをしていると私に説明することはできますか?

私は多くのコードを探していましたが、成功しませんでした。

私はこのポストを見つけましたPreventing Links before jQuery is Loaded これは私の問題に関係があるかどうかは分かりません。なぜなら私は1つのリンクしか持たないからです。

ご協力いただきありがとうございます。すべての

答えて

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のlive()

オンライン表示例here

+0

クリックイベントが発生しないため、これは私のためには機能しません。それともあなたの答えに何か恋しいですか?ライブメソッドは何をしますか?それは$( "a")と違いますか?click(function(){...}); ? – ThdK

+0

"現在のセレクタと現在と将来一致するすべての要素のイベントハンドラをアタッチします。" jQueryがロードされた後、他のjsによってhtml要素が作成されると、liveを使用する必要があります。あなたのケースでは、カスタムWebコントロールがjs経由で要素を作成しているかどうかわからないのですか?イベントがトリガーされることはないと言います。これは、イベントがDOM要素にアタッチされていないことを意味します。 –

+1

@ThdK - もしあなたがコードを理解していなければ、動かないとは言わないでください。今、要素がページに削除/追加されても 'ライブ'バインディングが機能するので、実際に問題を解決する可能性があります。 – Dementic

0

まず:あなたはこのようにコードをリファクタリングすることができます

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

あなたの答えはでおそらくある:

これらのhtmlがカスタムWebコントロールによって作成された

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

firebugまたはchromeデベロッパーツールを使用して、すべてのイベントリスナーを見ることができます。そのうちの1つがjQueryであることを確認してください。

+0

あああなたは正しいです。これは、別のコードを試して、それが異なっていてもいなくてもかまわないかどうかを確認するために残ったものです。私は私の質問でそれを更新しました。どのように私は火かき棒ですべてのイベントリスナーを見ることができますか? – ThdK

+0

DOMパネル:http://getfirebug.com/wiki/index.php/DOM_Panel – jgauffin

+0

私のリンクを選択してDOMパネルを開くと、次のように表示されます。\t click()これが何であるかわかりません。 – ThdK

関連する問題