繁体   English   中英

jQuery在Internet Explorer 8中不起作用(“this”返回DOM而不是jq)

[英]jQuery doesn't work in Internet Explorer 8 (“this” returns DOM instead of jq)

我面临一个奇怪的问题,找不到任何解决方案。

jQuery (任何版本,从1.7。*到1.10。*)在Internet Explorer 8中失败。所有插件(来自bootstrap)和jQuery库都出现错误:

Object不支持此属性或方法

调试器截图

调试器截图

挖掘插件代码,如下所示:

$.fn.alert = function (option) {
    return this.each(function () {
        //...
    })
}

显示问题: 关键字指向HTMLDomObject ,而不是jQuery对象。 什么会导致这种奇怪的错误?

仅限 Internet Explorer 8

其他一些代码或插件可能正在加载另一个JavaScript库,并且调用代码可能不会处理jQuery.noConflict() 这种情况多次发生在我身上。 在此期间,为了使您的代码有效,您还可以执行以下操作:

//If 'this' is pointing to a HTMLDomObject
var obj = $(this)

我找到了一段代码,导致了这个问题。 我仍然不明白,它如何以这种方式打破所有jQuery以及为什么它会破坏(再次,它在所有浏览器中都能完美地工作但是Internet Explorer 8),但是将迭代器中的for更改 $ .each()使错误消失。

for (var i in $postsPortions) {
    var $p = $($postsPortions.get(i));
    var offset = $p.offset();
    if (offset && Math.abs(offset.top - scrollTop) < 100) {
        var year = $p.data('year');
        var season = $p.data('season');
        window.location.hash = year + '/' + season;
        $milestones.removeClass('active');
        $milestones.filter('.year_' + year + '.season_' + season).addClass('active');
        return;
    }
    if (i >= ($postsPortions.length - 1)) return;
}

当你使用jQuery.each方法时,“this”(在回调中)指向DOM元素,而不是指向jQuery包装器。 如下所示,你必须在jQuery对象中包装“this”:

$elements.each(function(){
    var $this = $(this);

    // do something with $this ...
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM