Имам няколко динамично създадени менюта на страница, които трябва да се скрият, когато потребителят кликне някъде на страницата. Това трябва да работи, ако потребителят щракне върху менюто или се опита да отвори друго меню.
Също така искам манипулаторът на събития да се развърже, когато приключи със скриването. Намерих решение, използвайки document.on()
one one()
, но наистина бих искал да огранича манипулатора document
до нещо по-надолу в DOM. Проблемът е, че нарушава моя код.
Всяка помощ с елегантно решение се оценява.
Основната причина, поради която искам да направя това, е да мога да предотвратя event propagation
като например в:
ДЕМОНСТРАЦИЯ на неуспешно разпространение
Успешно разпространение, неуспешно one()
ДЕМОНСТРАЦИЯ на обработка на кликване
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