0
var timer; 

function check_element_load(){ 
    timer = window.setInterval(function(){ 
     console.log("still working"); // keeps running forever 
     if(document.getElementById("comments")){ 
      console.log("FOUND"); // this actually runs 
      document.getElementsByTagName("fb:comments")[0].setAttribute('order_by', 'social'); 
      window.clearInterval(timer); // < not effective 
     } 
    }, 50); 
} 


check_element_load(); 

我试图把一个脚本在上面继续检查,如果一个特定元素是在浏览器加载成功,它的工作原理(登录“发现”控制台),但我当我写另一个控制台日志,看看间隔是否仍在运行。它确实,它永不停止,clearInterval完全被忽略clearInterval不clearInterval

有什么我错过了?我也试过使用所有其他解决方案,包括settimeout和现在最接近的一个是我写的,我只是希望clearinterval在条件返回true后生效

有没有什么类似于clearinterval更有效,杀死整个功能还是什么?

+0

线是否被击中?在'document.getElementsByTagName ...'行可能有错误。 – 2013-04-08 11:27:16

+0

@JamesMcLaughlin这条线正常工作,除了清除间隔之外,一切都正常工作并正常工作 – Osa 2013-04-08 11:28:27

+0

不是说这有什么区别,但为什么你有两个'timer'变量? – 2013-04-08 11:29:29

回答

0

既然这样,你的code is logical correct,但是如果

document.getElementsByTagName("fb:comments")[0].setAttribute('order_by', 'social'); 

引发错误,(当然)超时将never be cleared。你可以use SetTimeout instead

最有可能调用getElementsByTagName("fb:comments")返回一个空集,给你一个“方法setAttribute不存在元素未定义”类型错误。

+0

你说的这句话是没问题的,它会返回false/error,因为你没有facebook('fb:comments')标记xmlns设置,你可以测试一个普通的标记,但是我只是试图完全删除该行,我得到相同的结果 看起来像问题是从'如果'条件,它不正确返回'真正',它的要点是检查元素是否存在 – Osa 2013-04-08 11:50:44

+0

@Osa这不能是因为你声明console.log(“找到”)被执行。所以错误*必须在*上。或者有一些其他的代码干扰了你的代码,你没有在这里发布。 – Christoph 2013-04-08 11:53:55

+0

@Osa我能想到的唯一问题是,你可能还有一些其他的代码搞乱了'timer'变量? – Christoph 2013-04-08 12:04:41