我试图jQuery的同时通过表格的单元格进行迭代.removeClass调用之间添加延迟。 细胞没有setTimeout的正常显示,但setTimeout的代码中断。 我究竟做错了什么?
function reveal_board() {
$("td").each(function() {
var t=setTimeout('$(this).removeClass("invisible")', 500);
});
}
我试图jQuery的同时通过表格的单元格进行迭代.removeClass调用之间添加延迟。 细胞没有setTimeout的正常显示,但setTimeout的代码中断。 我究竟做错了什么?
function reveal_board() {
$("td").each(function() {
var t=setTimeout('$(this).removeClass("invisible")', 500);
});
}
试试这个:
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/
你this
指向全球的window
。
function reveal_board() {
$("td").each(function() {
$this = $(this);
var t=setTimeout(function(){$this.removeClass("invisible");}, 500);
});
}
第一件事,第一,避免使用字符串的第一个参数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));
});
嗯,我有同样的问题,我解决了这种方式...但我不知道表演或什么想法,我用它在很短的循环(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);
});