代码之家  ›  专栏  ›  技术社区  ›  Pentium10

jQuery为什么$(this)在setTimeout方法中不起作用?

  •  2
  • Pentium10  · 技术社区  · 15 年前

    $('#loadingDiv2')
    .css('visibility','hidden')  // hide it initially
    .ajaxStart(function() {
        $(this).css('visibility','visible');
        $("#bbdata").empty();
    })
    .ajaxStop(function() {
        $(this).css('visibility','hidden');// works here 
    setTimeout(function(){
        $(this).css('visibility','hidden');// doesn't work here
        }, 100);
    });
    

    为什么$(this)在setTimeout方法中不起作用?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Nick Craver    15 年前

    它不起作用,因为 this window ),不过,您有几个opton,存储一个要处理的引用,如下所示:

    .ajaxStop(function() {
      var $this = $(this);
      setTimeout(function(){
        $this.css('visibility','hidden');
      }, 100);
    });
    

    或使用 $.proxy() 用于设置匿名函数中的上下文,如下所示:

    .ajaxStop(function() {
      setTimeout($.proxy(function(){
        $(this).css('visibility','hidden');
      }, this), 100);
    });
    

    在第一个解决方案中,我们存储了一个对我们想要处理的内容的引用,在第二个解决方案中,我们实际上设置了 当函数运行时…否则 窗口 .

        2
  •  0
  •   Nikita Rybak    15 年前

    有个问题 this 在里面 setTimout ,在 the docs .
    var that = this; 诡计。

        3
  •  0
  •   Anurag    15 年前

    setTimeout 在全局环境中运行,其中 this

    尝试存储对此的引用:

    .ajaxStop(function() {
        var me = this;
        setTimeout(function(){
            $(me).css('visibility','hidden');
        }, 100);
    });