我正在尝试在迭代表格的单元格时在jquery .removeClass调用之间添加延迟。单元格没有setTimeout正确显示,但是使用setTimeout代码中断。我做错了什么?
function reveal_board() {
$("td").each(function() {
var t=setTimeout('$(this).removeClass("invisible")', 500);
});
}
答案 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);
});
}
答案 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);
});