2013-09-27 35 views
0

这个调用为什么将一个数组的其他元素存储到一个数组无法正常工作?正如我可以看到,每当我尝试点击SHOW数组后,存储过去的第一个元素,它似乎继续并覆盖arrMenu的所有早期的元素。为什么这个参差不齐的数组没有正确存储?

http://jsfiddle.net/MasterOfKitties/jW5Bv/96/

的操作代码是在这里:

function fnPopArray() 
    { 
    arrItem[0] = document.getElementById('idName').value; 
    arrItem[1] = document.getElementById('idType').value; 
    arrItem[2] = document.getElementById('idPrice').value; 
    arrItem[3] = document.getElementById('idCalories').value; 
     /*We should generate the HTML string here. */ 
    var strHTML =  "<b><p>Name:</b>" + arrItem[0]+"</p><p>Type:"+ arrItem[1]+"</p><p>Price:"+arrItem[2]+"</p><p>Calories:"+ arrItem[3]+"</p>"; 

     document.getElementById("idResults").innerHTML = strHTML; 
     $("#idResults").show();  
     /*now we generate the ingredients string here */ 
     var strIngHTML = ""; 
     for(var i=0;i<arrItem[4].length;i++) 
      { 
      strIngHTML = strIngHTML + arrItem[4][i]+"<br/>"; 
      } 
     strHTML = "<b>Ingredients</b><br/>"+strIngHTML; 
     /*We display it in the second div we have for ingredients */ 
     document.getElementById("idIngredients").innerHTML = strHTML; 
     $("#idIngredients").show(); 

    /*So we have populated and displayed the contents of our item. Now populate it into our menu object.*/ 

     arrMenu[intMenu]=arrItem; 
     intMenu = intMenu+1; 
    } 
+0

intMenu如何/何时初始化? – Lepidosteus

+2

检查你的控制台。 'arrItem [4]'是未定义的,所以'arrItem [4] .length'会在第65行发出错误。 –

+0

它在代码的最顶层,有很多评论。 arrItem [4]在另一个函数中被调用,所以它不应该是未定义的,虽然它应该能够工作,即使它是空的。 –

回答

0

当您在arrMenu推项目复制数组的值,而不是推动全球的对象。

arrTemp = fnPopArray(); 
arrMenu.push(arrTemp.splice(0)); 
alert("After the addition " + arrMenu); 
+0

感觉就像我的arrMenu实际上在它达到其推送代码之前就已经改变了。我不明白为什么,真的。有任何想法吗?你可以在这里看到它,它甚至在这个函数的代码里面改变。 http://jsfiddle.net/MasterOfKitties/jW5Bv/108/embedded/result/ –

+0

好的,我看到你的问题。当你将arrItem推送到arrMenu时,它始终是你更新值的同一个对象。所以当你改变值时,你改变一个对象的值并将这个对象再次推送到你的菜单。你必须每次创建一个新的arrItem。如果我是你,我会创建一个项目对象,而不是使用数组。阅读和使用它会更容易。 – peernohell

相关问题