-1

一連の入力フィールドを連想配列に追加しています。個々の要素にうまくアクセスできます。これは機能します:

arr = new Array();
field = document.getElementById("someField");
arr[field] = someValue;
alert(arr[field].id);

しかし、それらをループしようとすると、 がid表示されundefined、1 つの要素だけがループされます。

for (var elem in arr) {
    alert(elem.id + " " + arr[elem]);
}

私はそれを間違ってループしていますか?

編集: arr.length要素にアクセスできても、何らかの理由で 0 として表示されます。

4

2 に答える 2

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]」をキーとしてアイテムを効果的にオーバーライドし、1 つの要素だけになってしまいます。

@ user2736012 のコメントに関しては、「JavaScript 連想配列の説明」を読むことをお勧めします。

于 2013-09-10T18:06:46.770 に答える
1

Any associative array in JavaScript is an object. Arrays are objects that have special methods because they are numerically indexed. So your code should look something like this:

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

for (var p in obj) {
    alert(obj[p].id);
}
于 2013-09-10T18:03:30.377 に答える