这可能很难解释,所以请耐心等待。
for (var i = 0; i < this.array.length; i++) {
var object = this;
(function(object, i) {
object.array[i].addEventListener(event, function() {
func(i)
}, false)
}(object, i));
}
此处的数组是使用查询选择器创建的HTML元素的集合。
此代码保存在传递参数'func'的原型方法中。为'func'传递的值是一个匿名函数。
使用上面的代码,我可以成功地将计数器'i'传递回匿名函数。
其他一种方法,将使用Javascript的parentNode函数而不是元素数组。这是问题,上面的代码导致错误导致数组元素不是对象。
但是,当使用此代码时,不会发生错误。
for (var i = 0; i < this.array.length; i++) {
var object = this;
(function(object, i) {
object.array[i].addEventListener(event, func, false)
}(object, i));
}
因此,出于某种原因,在addEventListener中的匿名函数中包装'func'正在更改数组元素,至少看起来是这样。但这似乎没有意义?
答案 0 :(得分:0)
你可以在这里使用bind。
检查此代码段
for (var i = 0; i < this.array.length; i++) {
var object = this;
object[array[i]].addEventListener('click', fun.bind(this, i), false);
}
function func(i) {
alert(i);
}
希望有所帮助
答案 1 :(得分:0)
(function (object,i) {
object.array[i].addEventListener('click',
function(event){
var targetElement = event.target || event.srcElement;
func(targetElement,i);
},
false);
}(object,i));
这最终对我有用,通过将事件传递给动态函数,我可以根据需要引用被点击元素的parentNode。