1. ホーム
  2. jquery

jQuery bind click *ANYTHING*ただし*ELEMENT*は除く。

2023-09-30 01:44:23

質問

いくつかの要素が浮いていて、私は指定されたもの(例えばdiv#special)以外の何か(div、body、何でも...)をクリックしたときに何かをしようとしているとします。

私が思いつく以下の方法以外に、これを実現する良い方法はないかと考えているのですが...。

$(document).bind('click', function(e) {
    get mouse position x, y
    get the element (div#special in this case) position x, y
    get the element width and height
    determine if the mouse is inside the element
    if(inside)
        do nothing
    else
        do something
});

どのように解決するのですか?

を処理するには、次のようにします。 ただし とすると この 要素がクリックされた場合、一般的なアプローチでは、イベントハンドラを document にイベントハンドラを追加し、次に別のイベントハンドラを "except this" 要素に追加して、単にクリックイベントが document ;

$('#special').on('click', function(e) {
    e.stopPropagation();
});

$(document).on('click', function (e) {
 // Do whatever you want; the event that'd fire if the "special" element has been clicked on has been cancelled.
});

参照 event.stopPropagation() ドキュメント . jQuery 1.7より前のバージョンを使用している場合(この質問がなされたときと同じ)には、このドキュメントにあるように on() を使うことができません。 on() bind() この場合の署名は同じです。

デモはこちら http://jsfiddle.net/HBbVC/