setTimeout的不jquery.each工作,这(setTimeout not working

2019-06-24 11:37发布

我试图jQuery的同时通过表格的单元格进行迭代.removeClass调用之间添加延迟。 细胞没有setTimeout的正常显示,但setTimeout的代码中断。 我究竟做错了什么?

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

Answer 1:

试试这个:

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/



Answer 2:

this指向全球的window

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


Answer 3:

第一件事,第一,避免使用字符串的第一个参数setTimeout ,使用匿名函数,而不是因为它更容易调试和维护:

$("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));
});


Answer 4:

嗯,我有同样的问题,我解决了这种方式...但我不知道表演或什么想法,我用它在很短的循环(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);
});


文章来源: setTimeout not working with jquery.each, this