2010-10-12 117 views
2

我有这样的jQuery代码:

$('#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); 
}); 

为什么$(这)不会在setTimeout的方法工作?

回答

3

它不起作用,因为this是在这一点上(window),你有几个optons不同的上下文虽然,参考存储要处理,像这样的内容:

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

或者使用$.proxy()用于设置上下文在匿名函数,像这样:

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

在我们店来,我们要处理的是什么参考的第一方案,第二,我们实际上是在设置,this是该函数运行时...否则它将是window

0

thissetTimout存在问题,在the docs中有详细说明。
但这不是什么大不了的事,你总是可以使用var that = this;的把戏。

0

setTimeout在全局上下文中运行,其中this引用窗口对象。

尝试存储到这个代替的引用:

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