Как выполнить функцию один раз и избежать зацикливания?

<div class="wrap">
    <a class="button" href="">button</a>
</div>


задача в том, чтобы при нажатии на область блока .wrap передался клик на .button
но если делать это просто вот так

$('.wrap').on('click', function(){
    $(this).find('.button').click();
})


это приводит к зацикливанию

посоветовали вот это
$('.wrap')
.on('click', function() {
    $(this).find('.button').click();
  })
.on('click', '.button', function(e) {
    e.stopPropagation();
  })


но этот способ не подходит, так как по клику на .button необходимо чтобы вызвался lightbox, а в этом случае он не работает
  • Вопрос задан
  • 2706 просмотров
Решения вопроса 1
$('.wrap').on('click', function(e){
  var button = $(this).find('.button');
  if (e.target !== button[0]) {
    button.click();
  }
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Всего 1 вопрос - зачем? -Зачем ставить лишний обработчик?

При клике на .wrap должен сработать обработчик на .button, как и при клике на сам .button. В таком случае достаточно установить клик только на .wrap:

$('.wrap').click(function() {
     $('#lightbox').show();
});
Ответ написан
Комментировать
@heartdevil
плыву как воздушный шарик
Привет.

А вручную у вас lightbox вызывать нельзя?

То есть типа так сделать

$('.wrap')
.on('click', function() {
    $(this).find('.button').click();
  })
.on('click', '.button', function(e) {
    //Условно
   $('#lightbox').show();
    e.stopPropagation();
  })
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы