2

html フォームを受信して​​います。これは、配列内に 2 つ以上の要素がある場合は正常に機能しますが、要素が 1 つしか受信されない場合、users[t] is null in fireBug? というエラーが発生します。

var users = form.elements["uname[]"];

for(t in users) {
  dataString += "User: "+users[t].value+"\n"
}

これで解決しました:

if( typeof users.value === 'string' ) {
   users = [ users ];
}
4

2 に答える 2

7

これは古い質問であることは知っていますが、何か他のものを探しているときに偶然見つけました。とにかく、これに出くわした他の人に別の答えを提供したいと思いました.

型をチェックして配列かどうかを確認し、オプションで値を新しい配列に入れる代わりに、 Array.prototype.concat()を使用できます。

その構文は

var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])

これらの値は、配列または単一の値のいずれかです。

特定のケースでは、空の配列から始めてフォーム入力を連結できます。これは、単一の値または配列のどちらを取得しても機能します。

var users = [].concat(form.elements["uname[]"]);

また

users = [].concat(users);
于 2016-03-15T00:59:12.750 に答える
1

変数が文字列かどうかを確認し、配列に変換できます。

if( typeof users === 'string' ) {
    users = [ users ];
}

配列の for-in の反復は避ける必要があります。そのステートメントは、オブジェクト プロパティを列挙するためのものです。次のような、より良いループを使用してみることができます。

var userCount = users.length;
for (var i = 0; i < userCount; i++) {
      dataString += "User: "+users[i].value+"\n"
}

長さに基づいてテストすることもできます。オブジェクトが単一の場合、undefined長さが返されます。

var userCount = users.length; //Get user count
if ( userCount == undefined ) { //Returned undefined if not an array.
    users = [ users ]; //Convert to array
}
于 2012-04-25T15:00:22.607 に答える