Цикл функции самовызова Jquery - PullRequest
1 голос
/ 20 октября 2011

Я пытаюсь проверить, выполнила ли моя самозвонящая функция jquery то, что произошло, но в результате каждый раз при каждом самовызове результат увеличивается.

HTML

<span id="checkit"></span>

Javascript

$(function(){
    callme();
});

function callme(){
    $('#checkit').append("callme loaded<br />");
    setInterval("callme()", 5000);
}

Обычно вот мой результат для кодов.

OnLoad.

callme loaded

5 секунд спустя

callme loaded <from previous
callme loaded

еще 5 секунд спустя

callme loaded <from previous
callme loaded <from previous
callme loaded
callme loaded
callme loaded
callme loaded

Извините за дерьмовое объяснение. Я очень много думал о том, почему это случилось. Если кто-нибудь может объяснить, что я сделал не так, или решение для этого. Пожалуйста, помогите - эта проблема не давала мне покоя в течение нескольких дней.

Ответы [ 3 ]

2 голосов
/ 20 октября 2011

Каждый раз, когда вы звоните callme, вы создаете новый интервал, который будет вызывать callme снова. Вы можете очистить предыдущий интервал, используя clearInterval или использовать setTimeout вместо setInterval.

function callme(){
    $('#checkit').append("callme loaded<br />");
    setTimeout(callme, 5000);
}
0 голосов
/ 20 октября 2011

setInterval не является setTimeout. Вы не очищаете интервал, поэтому они составляют.

0 голосов
/ 20 октября 2011

Вам необходимо проверить, был ли создан элемент #checkit. И вам нужно использовать тайм-аут (который вызывается только один раз) вместо интервала (который продолжается и включается):

function callme(){
   $('#checkit').append("callme loaded<br />");
   if (!document.getElementById('checkit'))
      setTimeout(callme, 5000);
}

Справочник по обучению: window.setTimeout

...