cssLàm thế nào để vượt qua 'này' thành một callback setTimeout
.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>
Tôi đang sử dụng jQuery và tôi muốn để làm cho mỗi .item
xuất hiện sau một bộ hẹn giờ nhỏ ngẫu nhiên như:
javascript
$('.item').each(function() {
itm = $(this);
setTimeout(function() {
itm.fadeIn(1000);
}, Math.floor(Math.random() * 1000));
})
Ở đây, itm
sẽ luôn chứa mục cuối cùng vì hàm được đánh giá sau tất cả các bài tập.
Tôi không thể sử dụng thông số thứ 3 của setTimeout()
vì thông số này sẽ không hoạt động trên IE.
Bạn không nên sử dụng setTimeout()
với phương pháp eval vì lý do bảo mật.
Vậy làm cách nào tôi có thể truy cập vào đối tượng của mình thông qua setTimeout()
?
Sửa
Tôi biết rằng câu hỏi này đã được đăng.
Nhưng tôi cho rằng nó hơi cụ thể với ngữ cảnh each()
.
Bây giờ một người nào đó đã hoàn toàn thay đổi tiêu đề của câu hỏi của tôi mà ban đầu được một cái gì đó giống như 'setTimeout() - jQuery.each() đối tượng tham số này'
'this' bên trong của 'setTimeout()' đề cập đến đối tượng toàn cầu. Mã của bạn ở trên thậm chí không nên hoạt động cho mục cuối cùng. –
Xin lỗi tôi đã thực sự làm 'itm = $ (this)' trong mã của tôi thay vì 'var itm = $ (this)', tôi đã cập nhật câu hỏi của mình. Sau đó, bây giờ tôi không biết câu trả lời để chấp nhận :) –
@PierredeLESPINAY Aha. Sự khác biệt giữa 'var itm' và' itm' là không có 'var', nó là một biến toàn cầu đơn lẻ, thay vì một biến cục bộ cho mỗi cuộc gọi của hàm kèm theo. Đó là lý do tại sao setTimeout chỉ từng thấy phần tử cuối cùng trong danh sách. – Izkata