2015-02-05 144 views
-1

for循环中,i是我的循环计数器。无法访问函数中的对象

console.log($(f_images[i].DOM)); 

$(f_images[i].DOM).hover(function() { 
    console.log($(f_images[i].DOM)); 
}, function() {}); 

控制台显示我:

[object Object] 
"Uncaught TypeError: Cannot read property 'DOM' of undefined". 

同样的事情发生,如果我与更换$(f_images[i].DOM)任何相关f_images

为什么我不能在悬停功能中访问对象数组本身?

+0

这是一个循环吗?我是你的循环计数器吗? –

+0

对不起,我忘了提及它在for循环。 –

+1

不可能说出为什么会发生这种情况,而不是某些(或全部)f_images元素中缺少DOM属性。 –

回答

1

基本上,你有这样的问题:JavaScript closure inside loops – simple practical example

通过您的悬停功能运行的时间,i是,将结束循环的最后一个值,第一个指数超出范围。

按照该答案中的描述,使用闭包关闭i,它应该按照您的预期工作。

for (var i = 0; i < f_images.length; i++) { 
    (function(i) { 
    $(f_images[i].DOM).hover(function(){ 
     console.log($(f_images[i].DOM)); 
    }, function(){ 

    }); 
    }(i)); 
} 
-1

更换

$(f_images[i].DOM) 

有:

$('f_images' + [i] + '.DOM') 
+0

'$('f_images'+ [i] +'.DOM')'在这里没有意义。一个jQuery选择器不能用来读取局部变量,比如'f_images'似乎是什么。 –