2015-01-20 2 views
30

Как проверить, есть ли на нем элемент прослушивателя событий, если я использую встроенную функцию на нем, как показано ниже. потому что у меня есть функция, которая вызывает функцию и добавляет прослушиватель событий, но это приводит к тому, что прослушиватель событий дублирования вызывает двойную функцию. так как я могу проверить его, поэтому я могу помешать ему добавить прослушиватель событий, если он уже существует. благодаря! : DПроверьте, есть ли у элемента прослушиватель событий. no jquery

for (var a = 0;a<formFieldInput.length;a++) { 
      if(formFieldInput[a].hasAttribute("name") && formFieldInput[a].attributes.title.value !== "Valid Until") { 
       formFieldInput[a].addEventListener("click",function(event) { 
        toggleFieldList(event,"show"); 
       }); 
      } 
+1

вы можете удалить его, прежде чем добавить его. – dandavis

+1

Не было бы проще добавить слушателя и дополнительное свойство, например 'data-listener = true', а затем установить, установлен ли' data-litener' и только добавить слушателя, если нет? – pawel

+0

вы также можете использовать прямое назначение для привязки обработчиков по одному событию, например: formFieldInput [a] .onclick = function() {...}; когда вы их заменяете, старый просто уходит без осложнений ... – dandavis

ответ

31

Для этого нет функции JavaScript. Однако вы можете установить логическое значение true при добавлении слушателя и false при его удалении. Затем проверьте это булевое значение, прежде чем добавить дублирующего прослушивателя событий.

Возможный дубликат: How to check whether dynamically attached event listener exists or not?

+5

Это настолько странный javascript, что не сказал вам об этом! Я нахожу это настолько странным. – vsync

+2

@vsync Это не проблема JavaScript, это функция браузера и то, как они управляют DOM. Если бы браузеры должны были обрабатывать такой чек, это, вероятно, было бы похоже на то, что сказал Райан Уорнер. –

+0

@SebastienDaniel - да, это то, что я имел в виду, DOM .. – vsync

20

Этого день на Chrome Dev Tools консоли, вы можете быстро выполнить эту функцию ниже, чтобы показать все обработчик событий, которые были прикреплены к элементу.

getEventListeners(document.querySelector('your-element-selector')); 
+1

это решение кросс-браузер или просто хром ?? – Anthony

+0

@ Энтони, как я упоминал выше, он работает только на Chrome Dev Tools – arufian

10

Вам не нужно. Просто похлопайте его там столько раз, сколько хотите, и так часто, как вы хотите. MDN explains identical event listeners:

Если несколько одинаковых EventListeners зарегистрированы на одной и той же EventTarget с теми же параметрами, дублирующие экземпляры отбрасываются. Они не вызывают вызов EventListener дважды, и их не нужно удалять вручную с помощью метода removeEventListener .

Смежные вопросы