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>
I'm using jQuery and I'd like to make each .item
appearing after a random little timer like:
javascript
$('.item').each(function () {
itm = $(this);
setTimeout(function () {
itm.fadeIn(1000);
}, Math.floor(Math.random() * 1000));
})
Here itm
will always contain the last item because the function is evaluated after all assignments.
I can't use the 3rd parameter of setTimeout()
because it will not work on IE.
It's not advised to use setTimeout()
with the eval method for security reasons.
So how can I access to my object through setTimeout()
?
Edit
I know that this question have already been posted.
But I though that it were slightly specific with the each()
context.
Now someone have entirely changed the title of my question that was originally something like 'setTimeout() - jQuery.each() this object parameter'
Do not use setTimeout, use jQuery own tools.
http://api.jquery.com/delay/
Working example: http://jsfiddle.net/qENhd/
Try this:
Try this insteed:
I can't explain why it works, but i think this is a reference to another "this" in your setTimeout.
http://jsfiddle.net/Pdrfz/
Create/Utilize a
closure
:http://jibbering.com/faq/notes/closures/
https://developer.mozilla.org/en/JavaScript/Guide/Closures
Try this:
Before
setTimeout
executeseach
loop would have finished executing, it will not wait. Also insidesetTimeout
functionthis
will not refer to the DOM element.Try something like this.
You can also try something like this.