js 循环中事件定义的问题

iTeacher 发布于 2013/05/10 21:02
阅读 301
收藏 0
for(var i=0; i<links.length; i++) {
        links[i].onmouseover = function() {
            moveElement("preview", -100*(i+1), 0, 10);
        }

}

moveElement第二个参数,不是自己认为的-100 -200 -300,而是原封不动的赋值给了onmouseover,导致最后都变成了-400.

这个问题怎么解决?谢谢

加载中
1
卖切糕大叔
卖切糕大叔

var tmpF=function(index){
  return function(){
    moveElement("preview", -100*(i+1), 0, 10);
  }
};

for(var i=0; i<links.length; i++) {
  var m=i; links[m].onmouseover = tmpF(i); 
}

1
泡不烂的凉粉
泡不烂的凉粉
for(var i=0; i<links.length; i++) { 
         links[i].onmouseover = function(i) { 
             moveElement("preview", -100*(i+1), 0, 10); 
         } 

 }
这样好使不?
iTeacher
iTeacher
谢谢,但还是要使用闭包的方法。
1
Arrowing
Arrowing

可以看http://www.oschina.net/question/782091_106254

问题一样的。。。

我的答案是:

函数在执行的时候才初始化活动对象,也就是说,函数表达式赋值时,是没对i求值的

而第一个函数执行时,此刻的i已经为10了

使用匿名函数,即刻执行,就会生成一个仅对该函数有效的变量i

也就是俗称的闭包。

iTeacher
iTeacher
非常感谢
0
sjunjun
sjunjun

for循环里的定义的变量的作用域在循环体外

onmouseover函数触发时读取到的i不是循环递增的i,而是你触发那一刻i的值.你可以用一个局部变量存储i的值再作为参数.

iTeacher
iTeacher
非常感谢
0
iTeacher
iTeacher
谢谢大家的帮助
返回顶部
顶部