2015-02-18 2 views
0
var choice1 = "hostAndPort"; 
var timer; 

function clickerFunc() { 
     timer = setInterval(checkElementExist(choice1), 500); 
}; 

function checkElementExist(thing) { 
    console.log("checkElementExist runs") 
    advance = document.getElementById(thing); 
    console.log(advance); 
    if (advance == null){ 
     console.log("advance defined as null"); 
    } else{ 
     console.log("Free from loop"); 
     clearInterval(timer); 
     clickerFunc2(); 
    } 
}; 

function clickerFunc2() { 
     console.log("woooooooooo"); 
}; 

Итак, я попробовал предложение ниже, но оно все еще не работает. clickerFunc вызывается при нажатии кнопки выходов пульта:Не запускайте остальную часть кода до тех пор, пока не существует указанный элемент

checkElementExist runs 
hostAndPort 
null 
advance defined as null 

так clickerFunc2 никогда не вызывается, и это, кажется, не продолжайте проверять каждые 500 миллисекунд.

UPDATE:

setInterval(function() { checkElementExist(choice1); },500); 

сделал трюк. Благодаря!

+0

Какая ошибка? –

+0

Что вы пытаетесь сделать в целом? Похоже, вы изобретаете колесо. – Nit

+0

Кажется, что он застрял в петле и никогда не заканчивается. – Oxy157

ответ

1

Не использовать while. Он повесит браузер.

Обратитесь к остальной части кода из checkElementExist

function checkElementExist(id) { 
    console.log("checkElementExist runs") 
    advance = document.getElementById(id); 
    if (advance == null){ 
     console.log("advance defined as null"); 
    } 
    else{ 
     console.log("Free from loop"); 
     clearInterval(timer); 
     restOfCode(); 
    } 
}; 

timer = setInterval(checkElementExist('hostAndPort'), 1000); 

--- UPDATE ---

setInterval принимает функцию в качестве первого аргумента, поэтому оно должно быть как: setInterval(checkElementExist, 1000);. Предыдущий код просто называл вашу функцию один раз, а интервал ничего не делал.

+1

Опрос будет работать, но, возможно, прослушивает [событие мутации] (https: //developer.mozilla .org/en/docs/Web/API/MutationObserver) будет лучше. – Prusse

+1

Ну, старые IE не поддерживают его. Зависит от требований @ Oxy157. Я просто установил существующий код Oxy157. – phts

+0

setInterval действительно была проблемой. Спасибо :) – Oxy157

0

В общем, вы можете использовать return, чтобы «не выполнять остальную часть кода» в функции. Кажется, что есть еще более простой способ решить вашу проблему. Какое точное требование?

function checkElementExist(id) { 
    console.log("checkElementExist runs") 
    advance = document.getElementById(id); 
    if (advance == null){ 
     return; 
    } 

    // rest of logic here 
}; 
+0

Это скрипт обезьяны-тампера/жира. Он проверяет, появляется ли всплывающее окно после нажатия кнопки перед запуском кода, который будет выполнять другие необходимые биты. Я знаю, что остальная часть кода работает, потому что я работал, используя задержку, используя setinterval. – Oxy157

+0

В этом случае должен быть достаточно ответа от @phts. – rmorrin

Смежные вопросы