2015-01-20 31 views
30

Bir öğenin olay dinleyicisi olup olmadığını, üzerinde aşağıdaki gibi bir satır içi işlev kullanırsam nasıl denetlenir. çünkü işlevi geri çağıran ve olay dinleyicisini ekleyen bir işlevim olduğu için, bir işlevi iki kez tetiklemesine neden olan çoğaltma olay dinleyicisine sahip olmasına neden olur. Bu yüzden nasıl kontrol edebilirim ki zaten var ise bir olay dinleyicisi eklemesini engelleyebilirim. Teşekkürler! : DBir öğenin üzerinde olay dinleyicisi olup olmadığını kontrol edin. 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

veri-dinleyici = TRUE 'gibi, – dandavis

+1

o dinleyicisi ve ek özellik eklemek için kolay olmaz eklemeden önce kaldırabilirsiniz, daha sonra veri-litener' ayarlanır' olmadığını kontrol edin ve sadece değilse dinleyiciyi ekleyin – pawel

+0

Ayrıca, olay başına eylemcileri bağlamak için doğrudan atama kullanabilirsiniz: ex: formFieldInput [a] .onclick = function() {...}; Bunları değiştirdiğinizde, eski olan sadece komplikasyonsuz gider ... – dandavis

cevap

31

Bunu başarmak için JavaScript işlevi yoktur. Ancak, dinleyiciyi eklediğinizde true'a bir boolean değeri ve bunu kaldırdığınızda false ayarlayabilirsiniz. Ardından, bir yinelenen etkinlik dinleyicisi eklemeden önce bu boolean'a karşı kontrol edin.

Olası yinelenen: How to check whether dynamically attached event listener exists or not?

+5

Çok garip javascript bunu size söylemiyor! Bunu çok tuhaf buluyorum. – vsync

+2

@vsync Bu bir JavaScript sorunu değil, bir tarayıcı özelliğidir ve DOM'yi nasıl yönetirler. Tarayıcılar böyle bir çekle başa çıkacak olsaydı, muhtemelen Ryan Warner'ın söylediği gibi olurdu. –

+0

@SebastienDaniel - evet demek istediğim, DOM .. – vsync

20

Chrome Geliştirici Araçları konsolda Bu gün, hızlı bir elemana olan tüm olay dinleyicileri göstermek için aşağıdaki bu işlevi gerçekleştirebilir.

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

bu çözümdür çapraz tarayıcı veya sadece krom ?? Yukarıda belirttiğim gibi, – Anthony

+0

@Anthony, yalnızca Chrome Dev Tools'ta çalışıyor – arufian

10

Gerek yoktur. Sadece orada istediğiniz kadar ve istediğiniz sıklıkta tokatlayın. MDN explains identical event listeners:

birden fazla özdeş Olay Dinleyicilerine aynı parametrelerle aynı eventtarget üzerine kayıtlıysa, yinelenen örnekleri atılır bulunmaktadır. EventListener'ın iki kez çağrılmasına neden olmaz ve , el ile removeEventListener yöntemiyle kaldırılmaları gerekmez.

İlgili konular