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