2010-10-12 121 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); 
}); 
相關問題