2012-05-21 13 views
0

这里是什么,我基本上是试图做代码:JavaScript的适用范围:定时器任意引用新的对象

document.body.addEventListener("keypress", f1, false); 

function f1(e){ 
    var span = document.createElement("span"); 
    window.setInterval(function(){ 
     ... 
      window.clearInterval(this); 
      document.body.removeChild(span); 
} 

因此,在短期,我试图做一个新的DOM元素,然后附上定时器,它将能够引用该特定的对象。问题是,我不知道如何处理上下文,所以this只是引用window,而当我尝试引用span(我不希望无论如何工作)时JavaScript会引发错误。我如何设置间隔的上下文到我在该函数中创建的DOM元素?

+0

我想你想'setTimeout',不'setInterval' ... –

+0

访问'span'应该不会引发错误。它仍然是本地范围的一部分。 – Jivings

+0

有趣的事实:clearInterval也可用于清除超时... – MaxArt

回答

5

setInterval返回一个整数,其是计时器的id。所以,你需要做的是保存它:

var interval = setInterval(function(){ 
// ... 
    clearInterval(interval); 
+0

谢谢,但我试图访问该对象,我没有清除间隔的问题。 –

+2

是的,你有这个问题。你正在使用一个间隔,所以这就是我认为它发生在这里:1)间隔函数被执行; 2)'clearInterval'无法清除间隔; 3)从DOM中删除''; 4)过了一段时间,间隔函数_再次执行_; 5)'clearInterval'再次失败; 6)试图删除''引发一个异常。 – MaxArt

3

保持变量为您的间隔:

document.body.addEventListener("keypress", f1, false); 

function f1(e){ 
    var span = document.createElement("span"); 
    var myInterval = setInterval(function(){ 
     ... 
      clearInterval(myInterval); 
      document.body.removeChild(span); 
} 
+0

谢谢,但我试图访问该对象,我在清除间隔时没有问题。 –