глобальная переменная в javascript интервал jquery - PullRequest
1 голос
/ 01 апреля 2012

У меня есть такой код

var challegneListener;

$(document).ready(function(){
    var challegneListener = setInterval("challengeListenerBot()",5000);
});

function challengeListenerBot(){
    clearInterval(challegneListener);
}

И проблема в том, что интервал не останавливается, потому что функция challengeListenerBot не видит переменную challegneListener как номер интервала. Я должен использовать jQuery, чтобы начать интервал, когда документ готов.

Ответы [ 3 ]

4 голосов
/ 01 апреля 2012

Изменить это:

$(document).ready(function(){
    var challegneListener = setInterval("challengeListenerBot()",5000);
});

К этому:

$(document).ready(function(){
    challegneListener = setInterval("challengeListenerBot()",5000);
});

Проблема в том, что вы объявляете внутри своей анонимной функции, вызываемой, когда DOM готов, новую переменную challengneListener. Он скрывает глобальную переменную и сохраняет идентификатор setInterval в локальную переменную, которая является сборщиком мусора, когда завершается выполнение ее вмещающей функции.

1 голос
/ 01 апреля 2012
$(document).ready(function(){
var challegneListener = setInterval("challengeListenerBot()",5000); 
});

Использование var внутри этой функции создает новую переменную, которая ограничена этой функцией, а это означает, что переменная challegneListener, которая определена глобально, остается неопределенной, поэтому интервал не очищается.Удалите var, чтобы исправить этот код.

0 голосов
/ 01 апреля 2012

Вы скрываете глобальную переменную, удаляете var:

$(document).ready(function(){
    challegneListener = setInterval("challengeListenerBot()",5000); 
    // removed the var keyword, because it hides the global var.
});

Другое дело, ваш код использует eval, замените его следующим образом:

challegneListener = setInterval(challengeListenerBot, 5000); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...