1
$('a').click(function(e){return false;});

ほとんどすべての場所でリンクを正常に無効にしますが、このサイト(SO)のトピックタグのツールチップポップアップにあるリンクでは機能しません。私はDOMを見ました、そしてそれらは確かに<a>タグです。

どうして?

ユーザーを現在のページにとどまらせるためのより堅牢な方法はありますか?(これは、DOMをグラフィカルに操作するブックマークレット用であるため、リンクを含むすべてのものをクリックしてドラッグできる必要があります。)

すべてのアンカーで通常のクリック機能を無効にできたとしても、他のタグの他のクリックコールバックによってトリガーされたナビゲーションに対しては何も実行されないことを私は知っています。

4

3 に答える 3

3

.onで試してください-たとえばSOサイトでは、これらのリンクは後で作成され、イベントが添付されます

$(document).on('click', 'a', function(e) {
 return false;
});
于 2012-07-20T00:45:48.440 に答える
1

私が以前に採用した手法は、ドキュメント全体に非表示の絶対位置の要素を配置することです。これは実際にFirebugLiteで採用されており、ElementInspectorがクリックをインターセプトできるようになっています。

心配する必要があるのは、イベントリスナーを絶対位置の要素にアタッチし、クリックしたときにマウスの下にあった要素を把握することだけです。幸いなことに、最近のすべてのブラウザーは、これを識別するためのメソッドdocument.elementFromPointを実装しています。実装間にはいくつかの違いがあります。これが私が通常使用する方法です(残念ながら、機能検出はこれには少し注意が必要なので、ブラウザー検出を行っています):

var scrollIsRelative = !($.browser.opera || $.browser.safari && $.browser.version < "532");
$.fromPoint = function(x, y) {

     if(!document.elementFromPoint) return null;

     if(scrollIsRelative)
     {
         x -= $(document).scrollLeft();
         y -= $(document).scrollTop();
     }

     return document.elementFromPoint(x, y);

};

クリックイベントリスナーを絶対位置のdivにアタッチし、クリック時にdivを非表示にし、このメソッドを呼び出して要素を取得してから、divを再度表示します。例:

$('#hugeDiv').on('click', function(ev) {
    var x = ev.pageX;
    var y = ev.pageY;
    $(this).hide();
    var el = $.fromPoint(x, y);
    $(this).show();

    //do stuff with el
});
于 2012-07-20T00:59:09.957 に答える
0

解決策は

window.onbeforeunload = function() {
  return "Are you sure you want to navigate away?";
}

私がそう言うなら、イベントシステムの正しい適切な使用。

質問の元の範囲は十分に広くありませんでした。これは私の質問につながった問題を解決します。

于 2012-07-20T00:34:29.223 に答える