2016-02-03 85 views
1

我的JavaScript函數有問題,在「for」部分,當我使用i來引用列表位置時,它不識別HTML元素,但是當我使用例如,[0][1]確實是。所以必須有與環部分問題,但我無法弄清楚它是什麼,這裏是代碼:JavaScript函數無法識別我的HTML元素

(function() { 
    "use strict"; 
    window.animacion_click_menu = function (id) { 
     var i; 
     var menu = document.getElementById('menu').getElementsByTagName('LI'); 
     var bloqueActual = document.getElementById(id); 
     for (i = 0; i <= menu.length; i++) {  //recorre los LI devolviendolos a su posicion original 
      menu[i].style.marginLeft = -40; 
      menu[i].style.opacity = 1; 
     } 
     bloqueActual.style.marginLeft = 200; 
     bloqueActual.style.opacity = 0; 
    }; 
})(); 

,這裏是我的html:

<head> 
    <meta charset="UTF-8"> 
    <title>Mario Luque Marchena</title> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" href="css/estilos.css"> 
</head> 

<body> 
    <center> 
     <h1 class="titulo">[email protected]</h1> 
    </center> 
    <div id="main-screen"> 
     <ul id="menu"> 
      <center> 
       <li id="sobremi" onclick="window.animacion_click_menu('sobremi');">Sobre mi</li> 
       <li id="portafolios" onclick="animacion_click_menu('portafolios');">Portafolios</li> 
       <li id="animacion" onclick="animacion_click_menu('animacion');">Animacion</li> 
       <li id="back-end" style="border-bottom-style: dashed;" onclick="animacion_click_menu('back-end');">Back-End</li> 
      </center> 
     </ul> 
    </div> 
    <script type="text/javascript" src="js/animaciones.js"></script> 
</body> 

,如果您有任何建議使代碼更好,也歡迎,我正在學習編碼。謝謝!和抱歉的情況下,英語不好是

+1

您想使用'我 Bergi

回答

2

你的錯誤真的在for循環。 採取一看:

for (i = 0; i <= menu.length; i++) { 

它應該是:

for (i = 0; i <= menu.length-1; i++) { 

否則,它會嘗試迭代從0到5,而你的菜單陣列只有4個項目。 其結果是,在最後一次迭代,當你嘗試用不存在的索引來訪問元素菜單(菜單[5])你的錯誤:

Uncaught TypeError: Cannot read property 'style' of undefined 

其他可能性克服這個是改變< =到<,並使用循環:

for (i = 0; i < menu.length; i++) { 
+1

是的,那是我的錯誤!這是一個簡單的錯誤哈哈哈我改變了<= for <,它的工作!非常感謝你! – Halen

+0

很高興幫助。 O / –

0

使用的window.onload()或

$('document').ready(function(){ 
    //Put your code here 
}) 

我覺得你的代碼是DOM創建之前得到執行。

+0

錯誤發生在循環中,我解決了它,但是你所說的也可能發生,我將使用其中一個,謝謝! – Halen

+1

'$('document').ready(function(){...})'等價於'$(function(){...})',對於那些不知道的人。 –