我将一堆输入字段添加到关联数组中。我可以很好地访问各个元素,例如。这有效:
arr = new Array();
field = document.getElementById("someField");
arr[field] = someValue;
alert(arr[field].id);
但是当我尝试遍历它们时,id
显示为undefined
,并且只有一个元素被循环播放。
for (var elem in arr) {
alert(elem.id + " " + arr[elem]);
}
我错了吗?
编辑: arr.length
出于某种原因显示为0,即使我能够访问其元素。
答案 0 :(得分:1)
JavaScript中的任何关联数组都是一个对象。数组是具有特殊方法的对象,因为它们是数字索引的。所以你的代码应该是这样的:
obj = {};
field = document.getElementById("someField");
obj[field] = someValue;
for (var p in obj) {
alert(obj[p].id);
}
答案 1 :(得分:1)
javascript-array中的键必须是数字或字符串。
field
自动转换为toString()
的字符串。
arr = new Array();
field = document.getElementById("someField");
var key = field.toString();
arr[key] = someValue;
alert(arr[key].id);
在你的for循环中,你迭代该数组的键。
在这种情况下field.toString()
。
并且字符串没有id
- 属性。
这将有效:
for (var elem in arr) {
alert(arr[elem].id + " " + arr[elem]);
}
通过DOM-Element的toString()
方式通常是类似“[SpanElement]”的通用字符串。
如果你试图添加多个span-elements,你可以用“[SpanElement]”作为键来覆盖项目,最后只有一个元素。
关于@ user2736012评论,我鼓励大家阅读 “JavaScript Associative Arrays Demystified”