Javascript数组未被填充

时间:2014-08-06 09:27:45

标签: javascript html arrays

所以我正在尝试自学HTML和Jscript,但我无法弄清楚我在这段代码中做错了什么,它是一个下拉问题列表,询问用户他们喜欢什么水果,并且他们要求做出9个答案,所以这个脚本是捕获那些答案并将它们存储在一个数组中,但当它在循环外部时,最后一个警报没有显示,所以我可以看到数组实际上没有被填充。 / p>

我使用警报进行错误检查:)

 <script>
      function submitInfo(passed){
           var Fruit = [];
           var myForm = passed+"Form";

           //alert("here start"+" "+document.getElementById(myForm).length+" "+myForm);
           for (var i = 0; i < document.getElementById(myForm).length; i++) {
                //alert("in loop");
                var myFruit = passed+"Input"+i;
                //alert(myFruit+" "+document.getElementById(myFruit).value);

                Fruit.push(document.getElementById(myFruit).value);
                // var Fruit[i] = document.getElementById(myFruit).value;
                alert(Fruit[i]);
           }
           alert(Fruit[i]);
      }
 </script>

提前感谢你的帮助,感激不尽

1 个答案:

答案 0 :(得分:2)

阵列正在正确填充,只是你没有正确测试它。

原因是因为在你的循环之后,i将等于document.getElementById(myForm).length。因此,当您使用它来访问Fruit数组时,您正在访问尚未填充的索引。您可以在循环后执行以下操作来证明这一点:

alert(i);

例如,如果document.getElementById(myForm).length5。你的循环将运行0..4,但在决定打破循环之前它仍将增加到5(它必须递增它以便它可以评估条件)。此时,阵列中将有5个项目(索引0-4)。然后,当您拨打上一个提醒时,i = 5,但Fruit[5]不存在。

如果您要将最后一个警报(循环之后)更改为Fruit[0],则应显示第一个项目。您也可以执行console.log(Fruit)并检查控制台是否有完整的数组内容。

This may help to demonstrate it better.