如何使用;这";在这个jquery函数中

如何使用;这";在这个jquery函数中,jquery,Jquery,我正在尝试编写一个函数,需要在window.setTimeout中引用“this”。目前它不起作用。我怎样才能重写它使它工作?谢谢 $(function() { $('li a').click(function() { $(this).parent().css('background-position','left top'); window.setTimeout("$(this).css('font-size','40px');",1000)

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

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

正如您所看到的,
这个
setTimeout()中有不同的含义

一种解决方案是将
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 );
     });
 });

您需要在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);
          });
     });
应该更近一点

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

没有报价。它需要是一个函数。

匿名函数很好,但是
setTimeout()
仍然从不同的上下文调用该函数,因此
这个
将具有不同的含义。@Kranu-
$。proxy
会处理这个问题。否则就完结了。哦,我从来没有真正了解过代理+感谢你有多种方法的回答。@Kranu-谢谢。我个人更喜欢闭包,只是感觉比较轻松,但是
$.proxy()
确实可以。约翰尼-记住通过单击答案旁边的复选标记来“接受”答案。你和回答问题的人都会因此获得声誉积分:o)