У меня есть несколько динамически создаваемых меню на странице, которые нужно скрывать всякий раз, когда пользователь щелкает где-нибудь на странице. Это должно сработать, если пользователь щелкает меню или пытается открыть другое меню.
Я также хочу, чтобы обработчик событий отвязался после завершения скрытия. Я нашел решение, использующее 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>
stopPropagation()
предотвратит запускdocument.one()
обработчика событий ... Конечно. вздох Дело в том, что даже безstopPropagation()
,document.one()
не работает ... Есть идеи, почему? - person Jan   schedule 09.11.2012