我混合了一系列<input>
和<select>
个项目。我想在页面上显示这些项目时填充数组。
我以同样的方式创建了inputItemsArray
和selectItemsArray
:
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!
答案 0 :(得分:1)
var inputItemsArray = document.getElementsById("formGroup").getElementsByTag("input");
var inputSelectArray = document.getElementsById("**formsGroup**").getElementsByTag("select");
你有一个's'不应该存在于formGroup中......这就是你未定义的原因。
答案 1 :(得分:0)
你的问题是:
getElementsByTagName
的结果视为数组,但它实际上是NodeList
。 for (a in b)
迭代而不是正确的数字for循环。以下是更新和简化的测试:http://jsfiddle.net/MMXKW/2/
如你所见:
for (a in b)
进行迭代时,您还会获得length
和item
的可枚举属性。相反,请使用:
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)
。