【问题标题】:jquery split() and indexOf results in "Object doesn't support this property or method"jquery split() 和 indexOf 导致“对象不支持此属性或方法”
【发布时间】:2011-02-06 04:55:40
【问题描述】:

我有以下代码:

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

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

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

【问题讨论】:

  • 只是作为一个提示,这些是普通的 Javascript 方法,它们不是 jQuery 特定的。
  • 如果您要发布更多代码可能会有所帮助。此外,您应该验证您认为从隐藏字段中获得的内容确实是其中的内容。
  • @Felix:我不确定内置拆分和 jquery 拆分之间是否有区别。
  • 对于这个问题的全面解释以及解决方法不仅适用于 indexOf,还适用于 IE 中其他缺失的数组函数,请查看 StackOverflow 问题stackoverflow.com/questions/2790001/…

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


【解决方案1】:

根据您的错误消息,我假设这是来自 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;
  };
}

【讨论】:

  • @Matt:谢谢。我以为他们已经在 IE8 中实现了它,所以去做了一个快速的实验,并且惊喜地在 IE7 中看到它。你可以猜到,这个实验是有缺陷的(我忘了删除对 Prototype 的引用,如果它丢失了,它可以方便地添加它)。再次感谢。
【解决方案2】:

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

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

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

【讨论】:

  • 这似乎应该可以工作,但由于某种原因它不是:>? line.id 101 >?选择{...} [0]:“101”长度:1>? $.inArray(line.id, selected) -1 >
【解决方案3】:
[].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;
});

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多