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(); 

Я пытаюсь поставить скрипт сверху, чтобы проверить, если конкретный элемент был успешно загружен в браузер, он работает (консоль вошли «FOUND»), но я когда я написал другой консольный журнал, чтобы узнать, все ли работает интервал. он никогда не останавливается, и clearInterval полностью игнорируетсяclearInterval не clearInterval

Есть ли что-нибудь, что я пропустил? Я также пробовал использовать все другие решения, в том числе settimeout, и ближайший для меня сейчас написан, я просто хочу, чтобы clearinterval вступил в силу после того, как условие вернется.

есть что-то похожее на clearinterval, что более эффективно, убивает целая функция или что-то еще?

+0

Ли линия когда-либо попадала? Может возникнуть ошибка в строке 'document.getElementsByTagName ... '. –

+0

@JamesMcLaughlin эта линия отлично работает, все вступает в силу и работает правильно, за исключением clearinterval – Osa

+0

Не то, чтобы это имело какое-то значение, но почему у вас есть две переменные 'timer'? –

ответ

0

Как он стоит, ваш code is logical correct, однако если

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

выдает ошибку, (конечно) тайм-аут будет never be cleared. Вы могли бы use SetTimeout instead.

Скорее всего, вызов getElementsByTagName("fb:comments") возвращает пустой набор, предоставляя вам «метод setAttribute не существует в Element undefined» Type Error.

+0

строка, о которой вы говорите, в порядке, она вернет вам ложь/ошибку, потому что у вас нет тегов facebook ('fb: comments'), установленных xmlns, вы можете протестировать обычный тег, однако я просто попытался полностью удалите эту строку, и я получаю тот же результат. похоже, что проблема связана с условием 'if', она неправильно возвращает' true', то есть она должна проверять, существует ли элемент – Osa

+0

@Osa. Это не может быть так как вы заявили, что выполняется console.log ("found"). Таким образом, ошибка * должна быть * на той же строке. Или есть другой код, мешающий вашему коду, который вы не публиковали здесь. – Christoph

+0

@ OSa Единственная проблема, о которой я мог подумать, состоит в том, что, возможно, у вас есть еще какой-то другой код с переменной 'timer'? – Christoph