ページ上のすべてのアンカーリンクのonbeforeunloadを無効にしようとしているので、ブラウザのウィンドウ/タブを閉じたときにのみトリガーされます。
これが私がこれをしている方法です:
すべてのアンカー、onmouseoverについて、私はnull値をwindow.onbeforeunload関数に格納します。次に、onmouseleave、window.onbeforeunload関数を復元します
$(function () {
SetupOnNavigateAway();
});
function OnBeforeUnload(oEvent) {
return "Are you sure you want to close this page?";
}
function SetupOnNavigateAway() {
window.onbeforeunload = OnBeforeUnload;
$(window).data('beforeunload', window.onbeforeunload);
$('body').delegate('a', 'hover', function (event) {
if (event.type === 'mouseenter' || event.type === "mouseover")
window.onbeforeunload = null;
else
window.onbeforeunload = $(window).data('beforeunload');
});
}
私の問題は、一部のブラウザバージョンでは、リンクをクリックしたときに、mouseclickイベントの前にmouseleaveイベントがトリガーされることです。(私のカーソルはリンクを離れていません)したがって、onbeforeunload関数は、呼び出す必要がないときに呼び出されます。
例:
これが現在の処理方法です。
- ボタン上でマウスを動かします:window.onbeforeunload = null
- マウスをボタンから離します:window.onbeforeunload = OnBeforeUnload
- ボタン上でマウスを動かします:window.onbeforeunload = null
- ボタンにカーソルを合わせてクリックします:window.onbeforeunload = OnBeforeUnload、リダイレクト
これがどのように機能するかです:
- ボタン上でマウスを動かします:window.onbeforeunload = null
- マウスをボタンから離します:window.onbeforeunload = OnBeforeUnload
- ボタン上でマウスを動かします:window.onbeforeunload = null
- ボタンにカーソルを合わせてクリックします:redirect(window.onbeforeunloadはまだnullです)
では、アンカーをクリックしたときにマウスリーブイベントが発生しないようにするにはどうすればよいですか?
ありがとう!