所以我正在尝试自学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>
提前感谢你的帮助,感激不尽
答案 0 :(得分:2)
阵列正在正确填充,只是你没有正确测试它。
原因是因为在你的循环之后,i
将等于document.getElementById(myForm).length
。因此,当您使用它来访问Fruit
数组时,您正在访问尚未填充的索引。您可以在循环后执行以下操作来证明这一点:
alert(i);
例如,如果document.getElementById(myForm).length
说5
。你的循环将运行0..4
,但在决定打破循环之前它仍将增加到5
(它必须递增它以便它可以评估条件)。此时,阵列中将有5个项目(索引0-4)。然后,当您拨打上一个提醒时,i = 5
,但Fruit[5]
不存在。
如果您要将最后一个警报(循环之后)更改为Fruit[0]
,则应显示第一个项目。您也可以执行console.log(Fruit)
并检查控制台是否有完整的数组内容。