2012-04-28 14 views
13
elemen.addEventListener('click',func,false); 
elemen.addEventListener('click',func,false); 

funcelemenをクリックして2回呼び出すかどうかを確認しますか?同じaddEventListenerは機能しますか?

はいの場合...同じイベントリスナーが存在することを確認するソリューションはありますかelemen

答えて

23

funcをクリックすると2回呼び出されます。詳細については読んだままにしておきます。仕様でaddEventListenerから

複数の同一EventListenersが重複するインスタンスが破棄されている同じパラメータで同じEventTargetに登録されている場合。それらがでない場合EventListenerが2回呼び出され、破棄されるためremoveEventListenerメソッドで削除する必要はありません。

(マイ強調)

ここでは例です:

var target = document.getElementById("target"); 
 

 
target.addEventListener("click", foo, false); 
 
target.addEventListener("click", foo, false); 
 

 
function foo() { 
 
    var p = document.createElement("p"); 
 
    p.innerHTML = "This only appears once per click, but we registered the handler twice."; 
 
    document.body.appendChild(p); 
 
}

それはそれは同じ機能なければならないこと、しかし、注意することが重要です 、同じことをする関数だけではありません。

var target = document.getElementById("target"); 
 

 
var count; 
 
for (count = 0; count < 4; ++count) { 
 
    target.addEventListener("click", function() { 
 
    var p = document.createElement("p"); 
 
    p.innerHTML = "This gets repeated."; 
 
    document.body.appendChild(p); 
 
    }, false); 
 
}
<input type="button" id="target" value="Click Me">

すべてのループの繰り返し、上異なる関数が作成されるためです。たとえば、ここで私が呼び出されますすべてが要素、4つの別々の機能をフックしています(たとえコードが同じであっても)。

+0

私はOPではありませんが、この回答は私にも多大な助けとなりました。ありがとうございました !! –

関連する問題