幻灯片,适用于Firefox,但不适用于IE

时间:2012-02-02 22:42:47

标签: jquery slideshow

是否存在JQuery的一般问题或更具体的问题阻止它在IE中正常工作?这个小提琴是一个叉子。

http://jsfiddle.net/AndyMP/bYrdk/

var images = [
"http://imaging.nikon.com/lineup/dslr/d90/img/sample/pic_003t.jpg",
"http://imaging.nikon.com/lineup/dslr/d90/img/sample/pic_005t.jpg",
"http://imaging.nikon.com/lineup/dslr/d90/img/sample/pic_001t.jpg"
];

var delay = 2000;
var transition = 1000;

for(var i in images)
{
var img = document.createElement("img");
img.src = images[i];
img.onload = function(){
    var parent = document.getElementById("content");
    parent.insertBefore(this,parent.childNodes[0]);
    if(i == images.length - 1)
    {
        i = 0;
        startSlides();
    }
}
}

function startSlides()
{
$("#content img:last").delay(delay).fadeTo(transition,0,function(){
    $(this).insertBefore($(this).siblings(":first")).fadeTo(0,1);
    startSlides();
});
}

2 个答案:

答案 0 :(得分:2)

最有可能的问题是您使用for..in循环来迭代数组。永远不要这样做,因为你将从数组的原型中获取元素并一直返回到Object。

接下来,您没有正确使用Closures。到图像加载时,i的值将发生变化,并且将等于images.length(假设您没有被第一个问题搞砸。创建一个新的Closure,其值为i已锚定:

img.onload = (function(i) {return function() {
    var parent = .........................
};})(i);

这些问题不是由jQuery引起的,而是由于您对基本JavaScript的误解造成的。

答案 1 :(得分:1)

div为空,因此它没有任何childNodes,并且为insertBefore()提供的参数parent.childNodes[0]会导致错误,因为insertBefore()需要一个节点(并且得到'未定义')

在div中插入至少   或使用jQuery:

$(this).prependTo(parent);