2011-11-11 56 views
1

我试图在数组中创建一个循环,并向其元素添加事件,但不成功。 这是数组:将事件添加到数组元素

div_empresa_links_elements.push({ 
    div_mouseover: div_imagens_mouseover, 
    div_submenu: div_empresa_imagens, 
    div_txt: div_imagens_txt 
}, { 
    div_mouseover: div_institucional_mouseover, 
    div_submenu: div_empresa_institucional, 
    div_txt: div_institucional_txt 
}, { 
    div_mouseover: div_localizacao_mouseover, 
    div_submenu: div_empresa_localizacao, 
    div_txt: div_localizacao_txt 
}, { 
    div_mouseover: div_infraestrutura_mouseover, 
    div_submenu: div_empresa_infraestrutura, 
    div_txt: div_infraestrutura_txt 
}, { 
    div_mouseover: div_politicaDeQualidade_mouseover, 
    div_submenu: div_empresa_politicaDeQualidade, 
    div_txt: div_politicaDeQualidade_txt 
}, { 
    div_mouseover: div_linhaDoTempo_mouseover, 
    div_submenu: div_empresa_linhaDoTempo, 
    div_txt: div_linhaDoTempo_txt 
}, { 
    div_mouseover: div_historico_mouseover, 
    div_submenu: div_empresa_historico, 
    div_txt: div_historico_txt 
}) 

这是循环:

for (var i = 0; i < div_empresa_links_elements.length; i++) { 
    var obj = div_empresa_links_elements[i] 
    obj.div_mouseover.onmouseover = function() { 
     obj.div_txt.style.opacity = 1 
     obj.div_txt.style.filter = 'alpha(opacity = 100)' 
     obj.div_submenu.style.opacity = .7 
     obj.div_submenu.style.filter = 'alpha(opacity = 70)' 
    } 
} 

事情只是工作,如果我把一个事件的每个元素(_mouseover),通过手没有环。谁能告诉我为什么?

+1

如果他们都应该做同样的事情,当你的鼠标在他们那么为什么不在函数上写一个鼠标,并让它们都引用相同的函数呢?在for循环中有一个函数没有意义,您不需要创建十几个函数来执行相同的操作。这是你当前的代码在做什么。 – Ryan

+0

是的,谢谢:) –

回答

3

该问题是由关闭问题引起的。目前,obj在每次迭代时都被覆盖。因此,obj指向最后定义的元素。为了解决这个问题,包在自调用函数的循环体,并通过可变obj作为参数,如下图所示:

for (var i = 0; i<div_empresa_links_elements.length;i++){ 
    var obj = div_empresa_links_elements[i] 
    (function(obj){ //obj is declared again. Inside this func, obj = <see below> 
     obj.div_mouseover.onmouseover = function(){ 
      obj.div_txt.style.opacity = 1 
      obj.div_txt.style.filter = 'alpha(opacity = 100)' 
      obj.div_submenu.style.opacity = .7 
      obj.div_submenu.style.filter = 'alpha(opacity = 70)' 
     } 
    })(obj); //Pass the variable obj as defined at the top 
} 
+0

我明白了,谢谢:) –