代码之家  ›  专栏  ›  技术社区  ›  chris

jquery split()和indexof导致“对象不支持此属性或方法”

  •  16
  • chris  · 技术社区  · 15 年前

    我有以下代码:

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

    我正在动态创建一个复选框列表,并尝试通过将选定的id放入隐藏字段来记住复选框的状态。

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

    3 回复  |  直到 13 年前
        1
  •  23
  •   Nick Craver    15 年前

    有一个jquery方法可以克服 indexOf() ,您可以使用 .inArray() 而是:

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

    jQuery.inArray() 存在只是因为这个原因…如果您已经包含jquery,则无需再次编写该函数。注意:这实际上返回一个数字,比如 索引() 会。

        2
  •  21
  •   Matt    15 年前

    根据您的错误消息,我假设这是来自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;
      };
    }
    
        3
  •  0
  •   Ivo Sabev    15 年前
    [].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;
    });