为什么此代码会警告三个未定义的值?

时间:2010-07-26 18:28:37

标签: javascript dom

为什么此代码会提醒三个未定义的值?

    <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>

提前谢谢。

3 个答案:

答案 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)

<强>更新

由于您只有一个输入字段,因此下面的代码将仅显示该按钮。

Here is the working demo

您可以修改您的功能,并以这种方式调用:

    <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);
        }
    }
相关问题