2011-12-30 57 views
3

我有以下代碼爲多個傳單,點擊時將顯示一個幫助文本覆蓋4秒後消失。我可以讓它顯示幫助文本,但超時不起作用。設置多個對象的超時時間

$(".flyercontainer").click(function(){ 
    $(this).children('.flyerHelp').css('opacity',0.8); 
    setTimeout(function(){ 
     $(this).children('.flyerHelp').css('opacity',0); 
    },4000); 
}) 

感謝您的幫助。

回答

6

您的setTimeOut()的回調中的this與您認爲的不同(它指向全局對象window)。

$(".flyercontainer").click(function(){ 
    var children = $(this).children('.flyerHelp'); 
    children.css('opacity',0.8); 
    setTimeout(function(){ 
     children.css('opacity',0); 
    },4000); 
}); 
+0

快手配得上贊:) – Pavan 2011-12-30 03:53:50

+0

@JQone:顯然它值得downvote以及。 – alex 2011-12-30 03:54:11

+0

我之所以下降是因爲你原來的帖子不是答案,你所寫的只是「這不是你認爲它在你的函數中」,而沒有解釋它是什麼或如何解決它。我現在改變了我的投票,因爲你編輯了你的帖子以顯示一個很好的解決方案。 – Paulpro 2011-12-30 03:58:17

0

如上所述,this在用於window.setTimeout()方法回調函數的範圍使用時,指的是window對象。您可以通過在.flyercontainerclick處理程序的範圍內設置一個變量this來解決此問題,但不在您致電setTimeout()的範圍內。

或者,您可以鏈接jQuery的delay()方法兩個零持續時間動畫之間的對象的不透明度,以達到相同的效果。 (演示:http://jsfiddle.net/V2ZYy/