0

ページ上のすべてのアンカーリンクの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関数は、呼び出す必要がないときに呼び出されます。

例:

これが現在の処理方法です。

  1. ボタン上でマウスを動かします:window.onbeforeunload = null
  2. マウスをボタンから離します:window.onbeforeunload = OnBeforeUnload
  3. ボタン上でマウスを動かします:window.onbeforeunload = null
  4. ボタンにカーソルを合わせてクリックします:window.onbeforeunload = OnBeforeUnload、リダイレクト

これがどのように機能するかです:

  1. ボタン上でマウスを動かします:window.onbeforeunload = null
  2. マウスをボタンから離します:window.onbeforeunload = OnBeforeUnload
  3. ボタン上でマウスを動かします:window.onbeforeunload = null
  4. ボタンにカーソルを合わせてクリックします:redirect(window.onbeforeunloadはまだnullです)

では、アンカーをクリックしたときにマウスリーブイベントが発生しないようにするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

2

クリック時にマウスリーブのためにイベントリスナーのバインドを解除しようとしましたか?

$('body').delegate('a', 'click', function (event) {
    $(this).unbind('mouseleave'); 
});
于 2012-04-11T09:01:50.703 に答える
0

受け入れられた答えは私にとってはうまくいきますが、別の解決策が必要な人のために、これが私にとってもうまくいくものです:

$('body').delegate('a', 'click', function (event) {
    $(this).attr('clicked', 'yes'); 
});
$('body').delegate('a', 'hover', function (event) {
    if (event.type === 'mouseenter' || event.type === "mouseover") {
        window.onbeforeunload = null;
    }
    else {
        if ($(this).attr('clicked') != 'yes') {
            window.onbeforeunload = $(window).data('beforeunload');
        }
        else {
            $(this).attr('clicked', '');
        }
    }
});
于 2012-04-11T09:27:21.137 に答える