2009-09-02 29 views
1

我試圖瓦解要求一個div,但我的setTimeout函數的意志不能成功調用它的回調函數。這是下面的代碼:爲什麼setTimeout回調會給我一個錯誤?

function newsFeed() { 

    this.delete = function(listingID) { 

     var listing = document.getElementById(listingID); 
     var currHeight = listing.offsetHeight; 

     var confirmDelete = confirm("Are you sure you'd like to delete this listing forever?"); 
     if (confirmDelete) { 
      this.collapse(listingID,currHeight,currHeight,100); 
     } 

    } 

    this.collapse = function(listingID,orig_height,curr_height,opacity) { 
     var listing = document.getElementById(listingID); 
     var reduceBy = 10; 
     if(curr_height > reduceBy) { 
      curr_height = curr_height-reduceBy; 
      listing.style.overflow = "hidden"; 
      listing.style.height = (curr_height-40) + "px"; 

      if(opacity > 0) { 
       opacity = opacity - 10; 
       var opaque = (opacity/100); 

       listing.style.opacity=opaque;      
       listing.style.MozOpacity=opaque;     
       listing.style.filter='alpha(opacity='+opacity+')'; 
      } 

      setTimeout("this.collapse('"+listingID+"',"+orig_height+","+curr_height+","+opacity+")",1); 
     } 
    } 
} 

var newsFeed = new newsFeed(); 

,我把它叫做文件如下:

<div id="closeMe"> 
    <a onclick="newsFeed.delete('closeMe');">close this div</a> 
</div> 

當它到達內this.collapse的setTimeout函數...它的錯誤「this.collapse不是一個功能「。

回答

3

當超時要求你退出的功能和「本」不再指的是什麼,你認爲它。

你應該用一個封閉,像這樣:

var self = this; 
setTimeout(function() 
{ 
    self.collapse(listingID, orig_height, curr_height, opacity); 
}, 1); 
+0

做我把這個新聞源中()或this.collapse函數內?又名...應該是'這'實際上指的是什麼? – johnnietheblack 2009-09-02 21:21:52

+0

...對不起,因爲現在即時得到self.collapse不是一個函數 – johnnietheblack 2009-09-02 21:22:47

+0

得到它,你統治 – johnnietheblack 2009-09-02 21:34:07

0

當超時被調用時,this不再是你希望它是什麼。您需要通過其他一些機制來引用您想要的DOM元素,可能是基於ID的檢索。

1

,你看到的是行爲,因爲在JavaScript作用域的問題。 JavaScript只有兩個範圍 - 功能和全局。

當您執行setTimeout()調用,你必須設置變量在全球範圍內,如果你想使用的狀態中,由於setTimeout()調用執行的代碼。這將是解決問題的方法;格雷格已經提出了一種方法來做到這一點。

有關setTimeoutCore JavaScript Reference的頁面,您可以在Mozilla開發人員中心找到更多的信息。

相關問題