ユーザーがページのどこかをクリックするたびに非表示にする必要があるページに、動的に作成されたメニューがいくつかあります。これは、ユーザーがメニューをクリックするか、別のメニューを開こうとした場合に機能する必要があります。
また、非表示が完了したら、イベント ハンドラーが自分自身をアンバインドするようにします。私はdocument.on()
1つを使用して解決策を見つけましたが、ハンドラーをDOMのさらに下にあるものone()
に制限したいと本当に思っています。document
問題は、それが私のコードを壊すことです。
エレガントなソリューションの助けをいただければ幸いです。
私がこれをしたい主な理由は、次のようなことを防ぐことができるようにするためevent propagation
です:
Javascript
// I want to change "document" to ".menus" here
$(document).on("click", ".displayMenu", function(e)
{
var $menu = $(this).siblings(".menu");
$(document).one("click", function(e2)
{
if (e.target!=e2.target)
$menu.hide();
});
$menu.toggle();
});
HTML
<div class="menus">
<div>
<div class="displayMenu">Show menu 1</div>
<div class="menu">menu 1</div>
</div>
<div>
<div class="displayMenu">Show menu 2</div>
<div class="menu">menu 2</div>
</div>
</div>