setTimeOut代码不能与jQuery一起使用

时间:2012-09-29 15:21:49

标签: javascript jquery

我有这段代码,但只执行一次......

$('.' + container).hover(function() {   
        t = setTimeout( function(elem){
            //this should be executed as long as I hover, 
            //with interval declared in viewSpped variable
            $(elem).find('img').first().appendTo('.' + container).fadeOut(500);
            $(elem).find('img').first().fadeIn(800);    

        }(this), viewSpeed);


    }...

知道我做错了什么吗?谢谢!

3 个答案:

答案 0 :(得分:3)

setTimeout在没有参数的情况下调用它的回调。因此elem不会传递给您的回调。如果你试图做一个自我调用函数,那么你所做的只是立即调用你的函数,而不是将回调传递给setTimeout()

我不知道你期望elem是什么,但如果你想让它成为悬停的物品,你会这样做:

$('.' + container).hover(function() {   
    var self = $(this);
    t = setTimeout( function(){
        //this should be executed as long as I hover, 
        //with interval declared in viewSpped variable
        self.find('img').first().appendTo('.' + container).fadeOut(500);
        self.find('img').first().fadeIn(800);    

    }, viewSpeed);
}...

答案 1 :(得分:1)

setTimeout只调用一次回调,这是正常的。

如果您希望定期执行函数,可能需要setInterval

而且,您的代码中还有另一个错误:您可能需要

t = setInterval( function(elem){
        //this should be executed as long as I hover, 
        //with interval declared in viewSpped variable
        $(elem).find('img').first().appendTo('.' + container).fadeOut(500);
        $(elem).find('img').first().fadeIn(800);    
    }, viewSpeed, this);

setIntervalsetTimeout传递给回调的参数是在持续时间之后。

或者,为了更兼容(请注意,我提供的链接也为IE提供了解决方法):

var $elem = $(this);
t = setInterval( function(){
         $elem.find('img').first().appendTo('.' + container).fadeOut(500);
         $elem.find('img').first().fadeIn(800);    
}, viewSpeed);

答案 2 :(得分:1)

你正在立即调用该函数而不是将其用作回调(无论如何都不会起作用,因为你需要传递参数),我认为你的意思也是setInterval

var elem = $(this);
var container = $('.' + container);

t = setInterval(function() {
        elem.find('img').first().appendTo(container).fadeOut(500);
        elem.find('img').first().fadeIn(800);
    }, viewSpeed);