【发布时间】:2012-02-28 03:31:20
【问题描述】:
css
.item {
display: none;
}
html
<div>
<div class="item">machin</div>
<div class="item">chose</div>
<div class="item">chouette</div>
<div class="item">prout</div>
</div>
我正在使用 jQuery,我想让每个 .item 出现在一个随机的小计时器之后,例如:
javascript
$('.item').each(function () {
itm = $(this);
setTimeout(function () {
itm.fadeIn(1000);
}, Math.floor(Math.random() * 1000));
})
这里itm 将始终包含最后一项,因为函数是在所有分配之后进行评估的。
我不能使用setTimeout() 的第三个参数,因为它不适用于 IE。
出于安全原因,不建议将setTimeout() 与 eval 方法一起使用。
那么我怎样才能通过setTimeout() 访问我的对象呢?
编辑
我知道这个问题已经发布了。
但我认为它在 each() 上下文中有点具体。
现在有人完全改变了我的问题的标题,原来是 'setTimeout() - jQuery.each() this object parameter'
【问题讨论】:
-
setTimeout()内部的this指的是全局对象。您上面的代码甚至不应该适用于最后一项。 -
对不起,我实际上是在我的代码中使用
itm = $(this)而不是var itm = $(this),我更新了我的问题。那么现在我不知道该接受哪个答案:) -
@PierredeLESPINAY 啊哈。
var itm和itm之间的区别在于,没有var它是一个全局变量,而不是每次调用封闭函数的局部变量。这就是为什么 setTimeout 只看到列表中的最后一个元素。 -
这实际上是问题
标签: javascript jquery scope settimeout