代码之家  ›  专栏  ›  技术社区  ›  Babiker

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

  •  0
  • Babiker  · 技术社区  · 15 年前

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

        <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 回复  |  直到 15 年前
        1
  •  3
  •   jasongetsdown    15 年前

    您遇到问题,因为数组 form.elements 不是真正的数组。其A HTMLCollection 它是一个类似数组的对象。因此,它不能用for…in循环来完成。切换到标准for循环,它将按预期工作。

    for…in循环实际上是为了遍历对象的属性。不建议在阵列上使用(请参见 description section here )

        2
  •  2
  •   Marimuthu Madasamy    15 年前

    元素是一个类似数组的结构,有三个属性:长度、项、名称项。因此,在for-in循环中,每个属性都会收到三个警报。常规for循环可以正常工作

        3
  •  1
  •   Sarfraz    15 年前

    更新:

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

    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);
            }
        }
    
    推荐文章