Добрый день, подскажите в чем причина срабатывания функции клика несколько раз?
Вот код:
<button id="target" class="btn btn-primary">ADD</button>
jQuery( "#target" ).click(function() {
alert('alert');
});
alert('alert');
});
При клике алерт вылазит 5 раз.
Комментарии
Попробуйте https://api.jquery.com/one
Такое же поведение, уже пробовал
Значит неправильно используете. Behaviours есть в скрипте?
"use strict";
Drupal.behaviors.helloworld = {
attach: function (context) {
jQuery( "#target" ).click(function() {
alert('alert');
});
}
}
})(jQuery, Drupal, drupalSettings);
вот целиком
вообщем вот так срабатывает один раз:
alert('alert');
evt.stopImmediatePropagation();
});
Не силен в js, объясните почему без "ЭТОГО" скрипт вызывается несколько раз?
Скрипт подключается через библиотеку в своем модуле, через hook_preprocess_page()
Вот так правильно:
jQuery( "#target", context ).click(function(){
потому, что бихеверы вызываются, например при подгрузке ajax - чтобы навесить события на вновь добавленный контент.
Но применяются они к тому, что находится в context.
Подскажите, а как быть если при загрузке скрипта выполняется такой код:
var kanban = new jKanban({..some code..});
У меня эта переменная создается 5 раз.
Проверяйте перед созданием новой на её наличие
У меня больше вопрос состоит в том, почему скрипт отрабатывается 5 раз, почему так происходит? Или может я не до понимаю какого то фундаментального факта в JS. Изучаю программирование методом проб и ошибок.
Тут дело не в самом js, а в том, что друпал дергает этот код 5 раз. И да, это не баг, это фича)
Спасибо. Так срабатывает один раз.
Вообщем, с событиями понятно, срабатывает. А как быть в этом случае:
"use strict";
Drupal.behaviors.kanban = {
attach: function (context) {
alert('alert');
});
}
}
})(jQuery, Drupal, drupalSettings);
В этом случае алерт так же срабатывает 5 раз.
Причина в том, что после загрузки страницы у вас 5 раз вызывается Drupal.attachBehaviors(); вместо одного.
Смотрите в инструментах на вкладке Сеть - есть ли аякс-запросы, и почему их несколько. Вообще, если они есть, то это не вполне нормально - на свежезагруженную страницу тянуть что-то аяксом без активности пользователя.