Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработка click-события по группе элементов (https://javascript.ru/forum/events/53070-obrabotka-click-sobytiya-po-gruppe-ehlementov.html)

Djiney 19.01.2015 17:45

Обработка click-события по группе элементов
 
Здравствуйте.

Занимаюсь разработкой небольшого плагина, возникла следующая ситуация:

Имеется "пирамида" из вложенных элементов (div, span и т.д.), каждому из которых назначен click-обработчик, т.е., грубо говоря:

HTML:
<div>
   <div>
      <span>
         что-нибудь
      </span>
   </div>
</div>

JS:
$('*').click(function(e){
// Функция
}

При клике на самый верхний элемент вызываются click-события для всех элементов, находящихся ниже, по очереди, если в вызываемой функции не окажется строчки "return false;".

Итак, задача: мне нужно сделать аналог следующей конструкции:
$('*').click(function(e){	
	if (confirm("???")) {
		return false;
	}
});


НО без использования самого confirm'а.

Если его не использовать, то способа остановить "прокликивание пирамиды" кроме как строкой "return false;" я не нашёл. Таким образом, после обработки клика по верхнему элементу, нужно использовать "return false;", а затем, при необходимости, продолжить "прокликивание" до победного конца.

На данный момент у меня 2 варианта:
1. Запоминать координату клика, а так же элемент, на который кликнули, а затем имитировать клик и перебирать по очереди элементы.
2. Каким-то чудом приостановить выполнение автоматического "прокликивания".

Вопрос, как это лучше реализовать?

Спасибо за внимание!

danik.js 19.01.2015 18:06

Цитата:

Сообщение от Djiney
способа остановить "прокликивание пирамиды" кроме как строкой "return false;" я не нашёл

Это называется "всплытие события". Остановить его можно вызовом функции с говорящим именем: e.stopPropagation()

Djiney 19.01.2015 18:16

Действительно, не знал, спасибо. Однако, решить задачу правильный вариант остановки не помог)

danik.js 19.01.2015 18:20

$(this).parent().trigger(e)

Djiney 19.01.2015 19:36

Да, оно, спасибо!


Часовой пояс GMT +3, время: 06:24.