Почему этот код предупреждает три неопределенных значения? - PullRequest
0 голосов
/ 26 июля 2010

Почему этот код предупреждает о трех неопределенных значениях?

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

3 голосов
/ 26 июля 2010

У вас проблема, потому что массив в form.elements не является истинным массивом.это HTMLCollection, который является массивоподобным объектом.В результате он не повторяется с циклом for ... in.Переключитесь на стандартный цикл for, и он будет работать как положено.

Цикл for ... in действительно предназначен для перебора свойств объекта.Не рекомендуется для использования с массивами (см. Раздел описания здесь ).

2 голосов
/ 26 июля 2010

form.elements - это массивоподобная структура, которая имеет три свойства: длина, элемент, namedItem.Следовательно, с циклом for-in вы получаете три оповещения для каждого из этих свойств.Регулярный цикл for будет работать правильно

1 голос
/ 26 июля 2010

Обновление:

Так как у вас есть только одно поле ввода, приведенный ниже код будет отображаться только для этого, то есть кнопка.

Вотрабочая демонстрация

Вы можете изменить свою функцию, и она будет вызываться следующим образом:

    <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);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...