У меня есть метод класса, который определяет прослушиватели событий. Для простоты воспользуемся следующим фрагментом кода.Повторить события JavaScript и addEventListener срабатывает дважды
function bindEvents() {
document.querySelector('button').addEventListener('click', (e) => {
console.log('clicked!');
});
}
// Initial event binding
bindEvents();
// Rebind events at some point for dynamically created elements
bindEvents();
<button type="button">Click</button>
Все отлично работает при использовании bindEvents()
только один раз, однако, например, назвав его снова в Ajax результатов обратного вызова в слушателе, выполненных дважды. Таким образом, это означает, что после второго bindEvents()
нажатие кнопки будет console.log()
два раза и так далее. Есть ли способ, которым я могу обойти это поведение?
Я знаю, что я могу связать события «динамически» с документом и проверить с помощью e.target
, но есть ситуация, когда мне нужны события mouseenter/mouseleave, и я не думаю, что это хорошая идея, чтобы всегда иметь эти eventListeners на документ.
Я где-то читал следующее, но мне кажется ложным ...
Метод .addEventListener обеспечивает те же функции, ссылка не будет связано более чем один раз на тот же элемент/события/захватывает комбинация.
Также я играл с параметром options
отсюда https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener, но без успеха.
Извините, если на это был дан ответ, но я не смог найти ответ в SO и поисковых системах.
UPDATE: Есть ли способ, чтобы перезаписать существующие eventListeners или старые должны быть удалены с removeEventListener
как ККТ предложил ниже? Есть ли более элегантное решение этой проблемы?
Благодарим за предложение. Это, безусловно, будет работать, как вы думаете, может быть, есть более чистое решение проблемы? –