jquery split()和indexOf导致“Object不支持此属性或方法”

时间:2010-04-09 15:12:52

标签: javascript jquery asp.net-mvc arrays split

我有以下代码:

var selected = $('#hiddenField').val().split(",");
...
if (selected.indexOf(id) > 0) {
   ... set value ...
}

我正在动态创建一个CheckBoxList,并试图通过将所选ID放入隐藏字段来记住复选框的状态。

我收到一条错误,指出“对象不支持此属性或方法”。我的假设是selected是一个数组,它应该支持indexOf。这是不正确的?

3 个答案:

答案 0 :(得分:23)

有一种jQuery方法可以克服indexOf()的缺失,你可以使用.inArray()代替:

var selected = $('#hiddenField').val().split(",");
if ($.inArray(id, selected) > -1) {
   ... set value ...
}

jQuery.inArray()因为这个原因而存在...如果你已经包含了jQuery,则无需再次编写该函数。注意:这实际上会返回一个数字,例如indexOf()会。

答案 1 :(得分:21)

根据您的错误消息,我假设这是来自Internet Explorer。

惊喜! Internet Explorer(包括版本8)不支持数组的indexOf。

您可以使用以下Firefox's implementation

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

答案 2 :(得分:0)

[].indexOf || (Array.prototype.indexOf = function(v,n){
  n = (n==null)?0:n; var m = this.length;
  for(var i = n; i < m; i++)
    if(this[i] == v)
       return i;
  return -1;
});