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

それらはすべて同じことを行うことになっている場合ときには、マウスをそれらの上なぜ機能上に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

私は、ありがとうございます:) –

関連する問題