2010-08-17 59 views
3

我想寫一個函數,我需要在window.setTimeout裏面引用「this」。目前它不起作用。我怎樣才能重寫這個,所以它的工作原理?謝謝。如何在這個jquery函數中使用「this」

$(function() { 
    $('li a').click(function() { 
      $(this).parent().css('background-position','left top'); 
      window.setTimeout("$(this).css('font-size','40px');",1000); 
    }); 
}); 
+0

Johnny - 請記住,單擊該答案旁邊的複選標記以「接受」答案。你和那個回答得到信譽點的人都是。 :o) – user113716 2010-08-17 22:59:23

回答

4

正如你所看到的,thissetTimeout()內部有不同的含義。

一種解決方案是存儲在一個變量的this正確的值,並在您在通過匿名函數引用它。

$(function() { 
    $('li a').click(function() { 
      $(this).parent().css('background-position','left top'); 
      var th = this; 
      window.setTimeout(function() { 
        $(th).css('font-size','40px'); 
       },1000); 
    }); 
}); 

另一種選擇是使用jQuery的$.proxy()它保留的this值爲你。

$(function() { 
    $('li a').click(function() { 
      $(this).parent().css('background-position','left top'); 
      window.setTimeout($.proxy(function() { 
        $(this).css('font-size','40px'); 
       }, this) 
      ,1000); 
    }); 
}); 

否則,您可以創建一個閉包。

$(function() { 
    $('li a').click(function() { 
      (function(th) { 
       $(th).parent().css('background-position','left top'); 
       window.setTimeout(function() { 
         $(th).css('font-size','40px'); 
        } 
       ,1000); 
      })(this); 
    }); 
}); 
+0

@Kranu - '$ .proxy'負責處理這個問題。否則關閉。 – user113716 2010-08-17 21:12:30

+0

哦,我從來沒有真正新的代理。 +1給你有多種方法的答案。 – Kranu 2010-08-17 21:19:29

+0

@Kranu - 謝謝。我個人更喜歡關閉,只是感覺更輕,但'$ .proxy()'當然是訣竅。 – user113716 2010-08-17 21:28:57

0

您需要在setTimeout調用中創建閉包。

$(function() { 
     $('li a').click(function() { 
      var $this = $(this); 
      $this.parent().css('background-position','left top'); 
      window.setTimeout(function() { 
       $this.css('font-size','40px'); 
      },1000); 
      }); 
    }); 

應該更接近。

+1

匿名函數是好的,但'setTimeout()'仍然從不同的上下文中調用函數,所以'this'將具有不同的含義。 – user113716 2010-08-17 21:07:28

+0

我相信你是對的。調整反映。 – 2010-08-17 21:10:48

0
 window.setTimeout(function(){$(this).css('font-size','40px')},1000); 

不含引號。它需要是一個功能。

+0

將不會工作。請參閱我的或@ g.d.d.c.的答案。 :O) – user113716 2010-08-17 21:18:05

相關問題