我在页面上有一些动态创建的菜单,每当用户单击页面上的任何位置时都需要隐藏这些菜单。如果用户单击菜单或尝试打开另一个菜单,这需要工作。
我还希望事件处理程序在完成隐藏后解除绑定。我已经找到了一个解决方案,document.on()
但one()
我真的很想将document
处理程序限制在 DOM 下方。问题是它破坏了我的代码。
任何有关优雅解决方案的帮助表示赞赏。
我想这样做的主要原因是能够防止event propagation
以下情况:
传播成功,one()
clickhandler 失败 DEMO
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>