2012-11-02 47 views
1

我試圖在Javascript數組中組合一組INPUT元素,並對爲什麼我得到一個多維數組(後面的代碼中名爲'urls'的數組)感到困惑。 。 事實證明,我已經混淆了與第一個元素相同的第四個元素。在Javascript中混合導致多維數組的HTML ID

<html> 

<head> 
    <script language="javascript"> 
    function validate() { 
     var form = document.forms.conf; 

     var urls = new Array(form.url1, form.url2, form.url3, form.url4); 
     alert(urls[0].value); // returns 'undefined' 
     alert(urls[0][0].value); // works 
    } 
    </script> 
</head> 

<body> 

<form name="conf"> 
    <input type="text" name="url1" id="url1"> 
    <input type="text" name="url2" id="url2"> 
    <input type="text" name="url3" id="url3"> 
    <input type="text" name="url4" id="url1"><br /> 
    <button type="button" onclick="javascript:validate();">Push me</button> 
</form> 

</body> 
</html 

我的問題是,爲什麼會發生這種情況? HTML屬性'id'與'document.forms.form_name.element'有什麼關係?爲什麼它會導致它將其放入多維數組中? 行爲似乎也是相同的跨瀏覽器,所以它必須是我不知道的一些定義。

+0

請注意,ID應該是唯一的!如果你想要一個數組,使用相同的名字而不是ID。也不是說僞裝標籤* javascript:*是不必要的,除了IE瀏覽器有一個VBScript作爲頁面上的第一個腳本 – mplungjan

+0

另外請注意,由於您使用的是document.forms訪問,我希望form.url1等同於form.elements [「url1」],因此使用元素的名稱。在你的情況下,你似乎設法通過擁有相同的非法ID來混淆問題 – mplungjan

回答

2

表單將爲每個具有名稱或ID的表單控件擁有一個屬性。該屬性的名稱將與名稱或標識相同。如果多個元素共享一個名稱(或者非法的,一個id),那麼該屬性將包含一個NodeList而不是一個HTMLElementNode。

第一個輸入的名稱(和ID)爲url1。 最後一個輸入的編號爲url1

因此,form.url1成爲由這兩個元素組成的NodeList。

+0

真棒,謝謝! – Niklas9