2017-03-25 11 views
0

イベントを追加する4つの入力があります。Javascriptコールバック関数の2回の呼び出し

私は

HTMLCollection.prototype.eachOnClick = function(callback){ 
 
    var len = this.length 
 
    var j = 0 
 
    for(var i = 0; i < len; i++){ 
 
     let elem = this.item(i) 
 
     document.addEventListener('click',() => { 
 
      callback(elem) 
 
     }) 
 
    } 
 
} 
 

 
document.getElementsByClassName('blog-search-filters').eachOnClick(function(elem){ 
 
    // if elem.checked do something 
 
    // else do something else 
 
    console.log(elem); 
 
})
<div class="blog-search-filters">a</div> 
 
<div class="blog-search-filters">b</div>

HTMLCollectiveに新しい関数を作成した問題のコールバック関数があるので、これらの項目の1つをクリックすると、入力のコールバックの4つのすべてが二回実行することです8回呼ばれる。

ここには何が欠けていますか?

大変助かりました。

乾杯

+1

なぜ「文書」に「クリック」ハンドラを添付していますか? O.o – Andreas

+0

コード@ジョンの作業スニペットを作成しました。おそらく今度は自分自身で解決策を見るでしょう。 – mehulmpt

+0

は2度発射されません。すべての人の発砲 – mehulmpt

答えて

2

あなたは、記述されていませ要素clickを処理する必要がありそうです。

HTMLCollection.prototype.eachOnClick = function(callback){ 
    var len = this.length 
    var j = 0 
    for(var i = 0; i < len; i++){ 
     let elem = this.item(i); 

     //use elem reference here 
     elem.addEventListener('click',() => { 
      callback(elem) 
     }) 
    } 
} 
+0

Doh、それを完全に逃した、私は要素ではなく、ドキュメントにクリックイベントを添付していた、あなたの助けを大変ありがとう –

関連する問題