2009-09-02 27 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开发人员中心找到更多的信息。

相关问题