为什么此代码会提醒三个未定义的值?
<html>
<head>
<script type="text/javascript" language="javascript">
function doIt(form){
alert(form.elements.length)
for (var i in form.elements){
alert(form.elements[i].value);
}
}
</script>
</head>
<body id="body">
<form method="GET" action="http://localhost/sandbox/moving/controllers/companies/cSubmit_bid.php">
<input type="button" value="Go" onclick="doIt(this.form)">
</form>
</body>
</html>
提前谢谢。
答案 0 :(得分:3)
您遇到了问题,因为form.elements
中的数组不是真正的数组。它是一个HTMLCollection
,它是一个类似于数组的对象。因此,它不能用for ... in循环进行迭代。切换到标准for循环,它按预期工作。
for ... in循环实际上是用于迭代对象的属性。不建议在阵列上使用(请参阅description section here)。
答案 1 :(得分:2)
form.elements是一个类似于数组的结构,它有三个属性:length,item,namedItem。因此,使用for-in循环,您将获得每个属性的三个警报。常规for循环可以正常工作
答案 2 :(得分:1)
<强>更新强>
由于您只有一个输入字段,因此下面的代码将仅显示该按钮。
您可以修改您的功能,并以这种方式调用:
<input type="button" value="Go" onclick="doIt()">
function doIt(){
var form = document.forms[0]; // get first form or adjust accordingly
for (var i = 0; i < form.elements.length; i++){
alert(form.elements[i].value);
}
}