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()
的第3个参数,因为它不适用于IE
出于安全原因,建议不要将setTimeout()
与 eval 方法一起使用。
那么如何通过setTimeout()
访问我的对象?
修改
我知道这个问题已经发布了。
但我认为它与each()
背景稍有针对性
现在有人完全改变了我的问题的标题,原来是像'setTimeout() - jQuery.each()这个对象参数'
答案 0 :(得分:15)
不要使用setTimeout,使用jQuery自己的工具。
$('.item').each(function () {
$(this).delay(Math.random() * 1000).fadeIn();
})
答案 1 :(得分:13)
创建/使用closure
:
$('.item').each(function () {
var that = this;
setTimeout(function () {
$(that).fadeIn(1000);
}, Math.floor(Math.random() * 1000));
})
答案 2 :(得分:3)
在setTimeout
执行each
循环完成执行之前,它不会等待。同样在setTimeout
函数this
内也不会引用DOM元素。
尝试这样的事情。
function fadeItem(item){
item.fadeIn(1000);
}
$('.item').each(function () {
var $item = $(this);
setTimeout(function () {
fadeItem($item);
}, Math.floor(Math.random() * 1000));
});
您也可以尝试这样的事情。
var $items = $('.item'), count = 0;
function fadeItem(item){
item.fadeIn(1000);
if(count < $items.length){
setTimeout(function(){
fadeItem($items.eq(count++));
}, Math.floor(Math.random() * 1000));
}
}
setTimeout(function(){
fadeItem($items.eq(count++));
}, Math.floor(Math.random() * 1000));
答案 3 :(得分:2)
您需要将this
存储在单独的变量中:
$('.item').each(function () {
var me = $(this);
setTimeout(function () {
me.fadeIn(1000);
}, Math.floor(Math.random() * 1000));
})
答案 4 :(得分:2)
这里的诀窍是将this
保存到可以在setTimeout
回调中安全评估的本地
$('.item').each(function () {
var self = this;
setTimeout(function () {
$(self).fadeIn(1000);
}, Math.floor(Math.random() * 1000));
});
答案 5 :(得分:2)
试试这个:
$('.item').each(function () {
var myVar = $(this);
setTimeout(function () {
myVar.fadeIn(1000);
}, Math.floor(Math.random() * 1000));
})
答案 6 :(得分:2)
试试这个:
$('.item').each(function () {
var elm = this;
setTimeout(function () {
$(elm).fadeIn(1000);
}, Math.floor(Math.random() * 1000));
})
我无法解释它为何有效,但我认为这是对你的setTimeout中另一个“this”的引用。
答案 7 :(得分:2)
试试这个:
$('.item').each(function () {
var item =$(this);
setTimeout(function () {
item.fadeIn(1000);
},
Math.floor(Math.random() * 1000));
});