2

我收到一个 html 表单。这在数组中有 2 个或更多元素时工作正常,但是当只收到一个元素时,我得到错误 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 回答