IE8和jQuery空指针

嘿伙计们:我一直在建立一个带有一些动画翻转的网站,在那里我为背景图像设置动画以产生褪色效果。 它在FF3,Safari,chrome中工作正常,但是IE8会抛出“undefined is null or not object”错误。

全文:

Message: 'undefined' is null or not an object Line: 22 Char: 16 Code: 0 URI: http://www.philipdukes.co.uk/jquery.bgpos.js Message: 'undefined' is null or not an object Line: 22 Char: 16 Code: 0 URI: http://www.philipdukes.co.uk/jquery.bgpos.js 

在我的网页标题中,我加载了jquery 1.3.2,然后在错误链接中找到了这个bgpos库,然后是我的主页脚本 。

每当我翻转导航按钮时,IE8都会抛出此错误…

任何帮助将不胜感激:我知道我的代码可能不是那里最时尚的,所以建议性的批评也是受欢迎的。 我想专注于这个错误…

shearn89

踩到东西,几乎看起来它正在爆炸,因为

 $(item).css({backgroundPosition: '0 -246px'}); 

在您的主页脚本的else子句中不存在。

编辑:刚刚注意到Jitter在上面添加了“当没有设置显式值时,IE8可能会返回未定义的背景位置。” 尝试在else中设置backgroundPosition,看看会发生什么。

我遇到了同样的问题并修改了jquery.bgpos.js,因此现在可以在IE中使用了。

 (function($) { $.extend($.fx.step, { backgroundPosition: function(fx) { if (fx.state === 0 && typeof fx.end == 'string') { if(navigator.appName == 'Microsoft Internet Explorer') { var start = $.curCSS(fx.elem,'backgroundPositionX'); start += ' '; start += $.curCSS(fx.elem,'backgroundPositionY'); } else { var start = $.curCSS(fx.elem,'backgroundPosition'); } start = toArray(start); fx.start = [start[0],start[2]]; var end = toArray(fx.end); fx.end = [end[0],end[2]]; fx.unit = [end[1],end[3]]; } var nowPosX = []; nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0]; nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1]; fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1]; function toArray(strg) { strg = strg.replace(/left|top/g,'0px'); strg = strg.replace(/right|bottom/g,'100%'); strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2"); var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/); return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]]; } } }); })(jQuery); 

虽然我不完全确定为什么/如何发生这种情况,但只有一种解释。

IE8使用undefined作为参数调用toArray(strg)中的Arraystrg )。 如果$.curCSS(fx.elem,'backgroundPosition')返回undefined或fx.end未定义$.curCSS(fx.elem,'backgroundPosition')则只能发生恕我直言。

我怀疑curCss的召唤是罪魁祸首。 当没有设置显式值时,IE8可能会返回undefined for background-position

您可以尝试插入alert语句并检查curCSS调用或/和fx.end是否未定义。 至少缩小问题的范围。