Как организовать программный клик по дочернему элементу?

Здравствуйте.
Подскажите пожалуйста.
Требуется программно вызвать обработчик события 'click' для дочернего элемента. Собственно погуглив можно найти решение
$('родительский элемент').find('дочерний элемент').trigger('click')
, но получается зацикливание вызовов. Если я правильно понимаю, то это из за всплытия событий.

HTML структура
<div class="woof_container_inner woof_container_inner_">
     <h4> Товар По Сезону                                                                    
         <a href="..." class="woof_front_toggle woof_front_toggle_opened">...</a>
      </h4>
      <div class="woof_block_html_items" style="display: block;">...</div>
</div>


Сейчас реализовал так, работает
jQuery(document).ready(function($){

	(function(){
		var flag = true;
		$('.woof_container_inner h4').on('click', function () {
			if (flag){
				flag = !flag;
				$(this).find('.woof_front_toggle').trigger('click');
				flag = !flag;
			}
		});
	})();

});

, но что то подсказывает , что есть более элегантный способ.

Заранее благодарю
  • Вопрос задан
  • 598 просмотров
Пригласить эксперта
Ответы на вопрос 3
IgorPI
@IgorPI
Что-нибуть слышали про делегирование событий?
С Вашего позволения, я процитирую пару строк из учебника...


Он заключается в том, что если у нас есть много элементов, события на которых нужно обрабатывать похожим образом, то вместо того, чтобы назначать обработчик каждому – мы ставим один обработчик на их общего предка. Из него можно получить целевой элемент event.target, понять на каком именно потомке произошло событие и обработать его.


Это как раз, то что нужно автору.
Ответ написан
pton
@pton Автор вопроса
Всем огромная благодарность.

Оказалось все проще. надо было просто проверять с какого объекта пришло событие. На мысль натолкнула статья порекомендованная Игорь Попрядухин.

в Итоге
jQuery(document).ready(function($){
	
	$('.woof_container_inner h4').on('click', function (e) {
		if ( e.target == this ){
			$(this).find('.woof_front_toggle').click();
		}
	});

});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы