IE8 .css()中的jQuery返回undefined值

时间:2010-12-15 08:14:29

标签: jquery internet-explorer cross-browser

这似乎在IE8中失败(尚未测试7,但肯定也会失败)函数中的value返回undefined。它在Firefox中运行良好:

$('selector').css('property', function(index, value){ alert(value); });

我脚本中的实际代码如下:

$('.scrollBkg').css('background-position', function(index, value){
    var backgroundPosition = value.split(' ');
    return (parseFloat(backgroundPosition[0]) + (($(this).hasClass('scrollLeft') ? -1 : 1) * parseInt($(this).css('z-index'))) / 2) + 'px ' + backgroundPosition[1];
});

为什么IE中valueundefined?相反,我怎样才能按预期工作呢?

3 个答案:

答案 0 :(得分:5)

在MSIE中检索 backgroundPositionY backgroundPositionX 而不是 backgroundPosition

var backgroundPosition = (document.all && !window.opera)
                              ?[$(this).css('backgroundPositionX'),
                                $(this).css('backgroundPositionY')]
                              : value.split(' ');

答案 1 :(得分:1)

我不确定这是不是你的问题,但是...... IE7和8都存在选择器/ id值的singel引号问题,并且可能找不到相应的DOM元素。

最近我刚刚在IE端完成了一个非常高的jquery项目,并且我将所有的'引号切换为“以使其工作。

在您的情况下尝试:

$("selector").css("property", function(index, value){ alert(value); });

所以我建议的是,IE从未找到你的元素,因此无法为其添加新类,因此“未定义”

对于jquery中的任何css值,我倾向于使用双引号而不是单引号。

答案 2 :(得分:1)

根据relevant section of the jquery documentation

  
    

function(index, value):将值返回到set的函数。接收集合中元素的索引位置和旧值作为参数。

  

因此,如果之前没有设置任何值,我预计value可能是undefined,也可能是null。我可以看到浏览器之间的这种行为是不同的 - 实质上,这是一个问题,浏览器的默认值是你正在使用的css属性。 IE的默认值可能是undefined,而firefox默认值更有意义。