Javascript回调函数触发两次

时间:2017-03-25 10:08:02

标签: javascript

我有四个输入,我想添加一个事件。

我在HTMLCollective上创建了一个新函数

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>

问题是,点击其中一个项目后,所有四个输入回调都会运行两次,因此回调函数会被调用8次。

我在这里缺少什么?

非常感谢任何帮助。

干杯

1 个答案:

答案 0 :(得分: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); //use elem reference here elem.addEventListener('click', () => { callback(elem) }) } } ,而不是文档。

var collection = db.GetCollection<User>("users");