要素の外側でのクリックを検出するには?

私はいくつかのHTMLメニューを持っており、ユーザーがこれらのメニューの頭をクリックすると完全に表示されます。ユーザーがメニューの外側をクリックすると、これらの要素を隠したいと思います。

このようなことはjQueryで可能でしょうか?

$("#menuscontainer").clickOutsideThisElement(function() {
    // Hide the menus
});
ソリューション

注意:stopEventPropagation()の使用は、DOMでの正常なイベントフローを壊すため、避けるべきものです。詳しくはこの記事をご覧ください。代わりにこのメソッドの使用を検討してください。

ウィンドウを閉じるためのクリックイベントをドキュメントボディに取り付けます。ドキュメントボディへの伝搬を止めるために、コンテナに別のクリックイベントを付けます。

$(window).click(function() {
//Hide the menus if visible
});

$('#menucontainer').click(function(event){
    event.stopPropagation();
});
解説 (30)

Eranさんの例と同じような動作をするアプリケーションがありますが、メニューを開くときにクリックイベントをボディにアタッチしています...。このような感じです。

$('#menucontainer').click(function(event) {
  $('html').one('click',function() {
    // Hide the menus
  });

  event.stopPropagation();
});

jQuery の one() 関数]1の詳細はこちら

解説 (7)

ウィンドウのクリックイベントのターゲットを確認し(他の場所で捕捉されていない限り、ウィンドウに伝搬するはずです)、それがメニュー要素のどれでもないことを確認します。 もしそうでなければ、あなたはメニューの外にいることになります。

あるいは、クリックの位置を確認し、メニュー領域内に含まれているかどうかを確認します。

解説 (0)