setTimeout不能使用jquery.each,这个

时间:2012-05-16 08:17:11

标签: jquery settimeout each

我正在尝试在迭代表格的单元格时在jquery .removeClass调用之间添加延迟。单元格没有setTimeout正确显示,但是使用setTimeout代码中断。我做错了什么?

function reveal_board() {
$("td").each(function() {
    var t=setTimeout('$(this).removeClass("invisible")', 500);
});
}

4 个答案:

答案 0 :(得分:19)

试试这个:

function reveal_board() {
    $("div").each(function(index) {        
        (function(that, i) { 
            var t = setTimeout(function() { 
                $(that).removeClass("invisible"); 
            }, 500 * i);
        })(this, index);
    });
}

将字符串传递给setTimeout()通常是一种不好的做法,而且我也不认为你可以通过这种方式传递任何变量。

我还将它包装在一个闭包中,以确保that始终适用于正确的元素而不会被替换。

虽然像NiftyDude说的那样你可能想要传入索引并使用它来依次显示每个元素。

工作示例 - http://jsfiddle.net/Cc5sG/

修改

看起来你不需要关闭:

function reveal_board() {
    $("div").each(function(index) {        
        var that = this;
        var t = setTimeout(function() { 
            $(that).removeClass("invisible"); 
        }, 500 * index);        
    });
}

http://jsfiddle.net/Cc5sG/1/

答案 1 :(得分:2)

您的this指向全局window

function reveal_board() {
  $("td").each(function() {
    $this = $(this);
    var t=setTimeout(function(){$this.removeClass("invisible");}, 500);
  });
}

答案 2 :(得分:1)

首先,避免在setTimeout的第一个参数中使用字符串,而是使用anon函数,因为它更容易调试和维护:

$("td").each(function() {
    var $this = $(this);
    var t=setTimeout(function() {
       $this.removeClass("invisible")
    }, 500);
});

另外,我不确定你要在这里实现什么(稍后更新你的问题,我会调整我的答案),但如果你想从每个invisible删除td课程} 500毫秒后,您可以使用index

$("td").each(function() {
    var $this = $(this);
    var t=setTimeout(function(index) {
       $this.removeClass("invisible")
    }, 500 * (index+1));
});

答案 3 :(得分:1)

嗯,我有同样的问题,我就这样解决了......但我不知道表演或其他什么,我在很短的循环中使用它(最多10个元素)并且它有效完美......顺便说一下,我用它来添加一个类,这样我就可以让你弄清楚删除一个类的内容了;)。

var elements = $(".elements");
var timeout;

elements.each(function(e){
    timeout = setTimeout(function(index) {
       elements[elements.length-e-1].setAttribute('class', elements[elements.length-e-1].getAttribute('class')+' MY-NEW-CLASS');
    }, 500 * e);
});