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)
中的Array ( strg )。 如果$.curCSS(fx.elem,'backgroundPosition')
返回undefined或fx.end
未定义$.curCSS(fx.elem,'backgroundPosition')
则只能发生恕我直言。
我怀疑curCss
的召唤是罪魁祸首。 当没有设置显式值时,IE8可能会返回undefined
for background-position
。
您可以尝试插入alert
语句并检查curCSS
调用或/和fx.end
是否未定义。 至少缩小问题的范围。