想给一组li的鼠标事件绑定不同的参数的同名函数
var liObj = window.document.getElementsByTagName("li");
for (var i = 0; i < liObj.length; i++) {
var element = liObj[i];
element.onmouseover = function () {
stopScroll(i);
}
element.onmouseout = goonScroll;
}
stopScroll(i);
是自己定义的一个函数,
现在问题是,按照我的理解,循环绑定的结果是
第一个li标签的onmouseover绑定了stopScroll(0);
第二个li标签的onmouseover绑定了stopScroll(1);
然而结果下来 每个li的onmouseover都绑定了stopScroll(6);
这是怎么回事?(liObj的长度是6,可是我想不通这里是怎么回事啊)
闭包或者自定属性
闭包
element.onmouseover = (function (i) {
return function(){stopScroll(i);}
})(i)
自定义属性
element.i=i
element.onmouseover = function () {
stopScroll(this.i);
}
函数闭包,就能解决了,触发事件的时候,你的事件是不是早就绑定好了,绑定好的时候i是不是就已经为6了,所以,需要一个闭包保存这个i
把var声明的变量,用let声明就可以了;