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

jquery中的ie javascript错误“对象不支持此属性或方法”

  •  7
  • Aistina  · 技术社区  · 14 年前

    出于某种原因,我在jquery.js的第3156行(版本1.4.3,非压缩版本)的Internet Explorer 8中得到以下javascript错误: Object doesn't support this property or method . firefox和google chrome没有错误。

    这是发生错误的行:

    if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
    

    调查( console.log(Expr.leftMatch[type]) )产生以下有趣的结果:在Google Chrome中,它输出

    /(^(?:.|\r|\n)*?):((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\3\))?(?![^\[]*\])(?![^\(]*\))/
    

    但是,在Internet Explorer中,这是输出:

    function() {
      var p = this;
      do p = p.previousSibling;
      while (p && p.nodeType != 1);
      return p;
    }
    

    在哪 exec 无法调用(未定义)。jquery.js中不存在带引号的函数。有人知道为什么会发生这种情况,或者我能做些什么来解决它吗?

    不幸的是,我还不能创建一个简单的脚本来重现这个问题,尽管我确实发现 this post of someone having the same problem 但是它没有提供解决方案(最后一篇文章建议页面应该在标准模式下运行,但我的页面已经运行了)。

    4 回复  |  直到 12 年前
        1
  •  8
  •   Aistina    14 年前

    事实证明,经过几个小时的痛苦之后,我终于自己解决了这个问题。如果您定义了 Object.prototype.previousObject 别处。

    删除该声明,或重命名 previousObject 去别的地方解决问题。

    有趣的是,我甚至自己把代码放在那里 Object.prototype.previousObject = [the function in my question] ,但我不认识代码。

    好吧,那又是浪费开发潜力的一天。

        2
  •  3
  •   Malcolm    14 年前

    (不幸的是,我的声誉使我无法直接对上述解决方案发表评论)

    我发现,如果您试图向对象添加一个名为“继承”的方法,也会发生同样的行为。 Object.prototype.inherited = <some func>

    它影响了IE6、7和8,但似乎在IE9(beta)中得到了修复。

        3
  •  2
  •   Joyce    14 年前

    仅供参考,我们在重新定义时也遇到了同样的问题 Object.prototype.keys .

        4
  •  -1
  •   brian brinley    14 年前

    你在运行什么版本的IE?

    您是否有机会以兼容模式运行?如果您在本地域上进行测试,默认情况下,IE将兼容性模式设置为打开,并且我遇到了类似这样的随机wierd问题。

    如果运行的是IE8,可以尝试在开发人员工具(F12)中更改浏览器模式,以查看问题是否仍然存在。