2011-11-11 257 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

我明白了,謝謝:) –