-1

我正在将一堆输入字段添加到关联数组中。我可以很好地访问各个元素,例如。这有效:

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 即使我能够访问它的元素。

4

2 回答 2

1

JavaScript 中的任何关联数组都是对象。数组是具有特殊方法的对象,因为它们是数字索引的。所以你的代码应该是这样的:

obj = {};
field = document.getElementById("someField");
obj[field] = someValue;

for (var p in obj) {
    alert(obj[p].id);
}
于 2013-09-10T18:03:30.377 回答
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]);
}

通过toString()DOM 元素的方式,通常是一个通用字符串,如“[SpanElement]”。如果您尝试添加多个跨度元素,您将有效地覆盖以“[SpanElement]”为键的项目并最终只有一个元素。

关于@user2736012 的评论,我鼓励大家阅读“ JavaScript Associative Arrays Demystified

于 2013-09-10T18:06:46.770 回答