接收javascript中只有一个元素的表单数组时的问题

时间:2012-04-25 14:57:43

标签: javascript html arrays forms

我收到的是html表单。这在数组中有2个或更多元素时工作正常,但是当只收到一个元素时,我得到错误用户[t]在fireBug中为null?

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

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

这解决了它:

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

2 个答案:

答案 0 :(得分:6)

我知道这是一个古老的问题,但我在搜索其他东西时却磕磕绊绊地看着它。无论如何,我想我会为偶然发现这个的其他人提供另一个答案。

您可以使用Array.prototype.concat(),而不是检查类型是否为数组,然后可选地将值包含在新数组中。

它的语法是

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

其中任何值都可以是数组或单个值。

在您的特定情况下,您可以从一个空数组开始并连接表单输入,无论您获得单个值还是数组,它都将起作用:

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

users = [].concat(users);

答案 1 :(得分: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
}