Por que não o clearInterval() funciona?
-
14-12-2019 - |
Pergunta
Eu sou novo para JavaScript e estou tendo problemas com esse script.é parte de um jogo de web e o script é supor para atualizar a página até que o jogador ganha ou perde.por alguma razão ele não parar de se atualizar, eu coloquei uma função de alerta para verificar se as funções de obras, e eu ficar alertas, mas ainda continuar a atualizar a página.o que estou fazendo de errado?
var t;
$(document).ready(function () {
intervals();
});
function intervals() {
t = self.setInterval('refreshData()', 10000);
}
function youWin() {
var f = $('#status:contains("YOU ARE THE WINNER!")');
if (f.length > 0) {
alert("YOU ARE THE WINNER!");
t = clearInterval(t);
}
}
function youlose() {
var f = $('#status:contains("You lost!")');
if (f.length > 0) {
alert("You lost!");
t = clearInterval(t);
}
}
function refreshData() {
$('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame');
youWin();
youlose();
}
Solução
Você precisa corrigir a referência para self
e corrigir a .load()
chamada.
.load()
é assíncrono para que ele não se completa antes de chamar youWin()
e youLose()
logo após ele.Você precisa de uma função de conclusão, então você pode verificar a ganhar ou a perder após o .load()
concluída com êxito.
refreshData()
deve ser estruturado como este:
function refreshData() {
$('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame', function() {
youWin();
youlose();
});
}
Você também deve alterar isso:
t= self.setInterval('refreshData()',10000);
para isso:
t = window.setInterval(refreshData, 10000);
Eu não vejo que self
foi ainda definido, de modo que também poderia ter sido causando o seu problema e você deve usar a função de referência diretamente ao invés de colocar em uma seqüência de caracteres.
E, como uma limpeza de problema, você deve alterar ambas as ocorrências dessa:
t = clearInterval(t);
para isso:
clearInterval(t);
Aqui está um limpos versão do código que também elimina variáveis globais e desnecessários definições de função:
$(document).ready(function() {
var t = window.setInterval(function() {
$('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame', function() {
youWin();
youlose();
});
}, 10000);
function youWin() {
if ($('#status:contains("YOU ARE THE WINNER!")').length) {
alert("YOU ARE THE WINNER!");
clearInterval(t);
}
}
function youlose() {
if ($('#status:contains("You lost!")').length) {
alert("You lost!");
clearInterval(t);
}
}
});