[英]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.