javascript:所有<select>项的数组都返回undefined。为什么呢?</选择>

时间:2011-11-02 22:15:42

标签: javascript arrays select input undefined

我混合了一系列<input><select>个项目。我想在页面上显示这些项目时填充数组。

我以同样的方式创建了inputItemsArrayselectItemsArray

var inputItemsArray = document.getElementsById("formGroup").getElementsByTag("input");
var inputSelectArray = document.getElementsById("formGroup").getElementsByTag("select");

input数组运行得很好。 select数组返回undefined。为什么呢?

我要做的是将submit数组的内容拼接到input数组中,然后将这些元素的值转储到最终数组中。

如果我只使用input数组,它可以正常工作,但因为select数组未定义...

这是代码:

var clientInputArray = document.getElementById("clientData").getElementsByTagName("input");
var clientSelectAray = document.getElementById("clientData").getElementsByTagName("select");

clientInputArray.splice(4,0,clientSelectArray[0]);  //  insert townType into array
clientInputArray.splice(5,0,clientSelectArray[1]);  //  insert province into array

console.log("clientInputArray: " + clientInputArray);

for (data in clientArray)
{
    if (clientArray[data].length != 0)
    {
        clientData.push(clientArray[data].value);
        console.log("data: " + data);
    } else {    //  because the last two elements of the array are empty...don't know why...
            break;
    }
}   
console.log("clientData: " + clientData);   
//clientData.push(companyName);

所以,重申:为什么select版本返回undefined?

WR!

2 个答案:

答案 0 :(得分:1)

var inputItemsArray = document.getElementsById("formGroup").getElementsByTag("input");
var inputSelectArray = document.getElementsById("**formsGroup**").getElementsByTag("select");

你有一个's'不应该存在于formGroup中......这就是你未定义的原因。

答案 1 :(得分:0)

你的问题是:

  1. 您将getElementsByTagName的结果视为数组,但它实际上是NodeList
  2. 您正在使用结果的惰性for (a in b)迭代而不是正确的数字for循环。
  3. 以下是更新和简化的测试:http://jsfiddle.net/MMXKW/2/

    如你所见:

    • 两者的结果都是非零长度。
    • 当您在NodeList上使用for (a in b)进行迭代时,您还会获得lengthitem的可枚举属性。

    相反,请使用:

    var selects = myForm.getElementsByTagName('select');
    for (var i=0,len=selects.length;i<len;++i){
      var select = selects[i];
      // ...
    }
    

    作为旁注,当您编写for (foo in bar)时,您还创建了一个全局foo变量;当您确实需要枚举对象的属性而不是数组或类似数组的对象的数值时,通常应该使用for (var foo in bar)