如何在这个jquery函数中使用“this”

时间:2010-08-17 21:03:49

标签: jquery

我正在尝试编写一个函数,我需要在window.setTimeout中引用“this”。目前它不起作用。我怎么能重写这个呢?感谢。

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

3 个答案:

答案 0 :(得分: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 );
     });
 });

答案 1 :(得分: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);
          });
     });

应该更接近。

答案 2 :(得分:0)

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

没有引号。它需要是一个功能。