2012-03-31 11 views
1

Ich habe Code haben wie dieseglobale Variable in Javascript Jquery Intervall

var challegneListener; 

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

function challengeListenerBot(){ 
    clearInterval(challegneListener); 
} 

Und das Problem ist, dass das Intervall nicht zu stoppen, becouse Funktion aufgerufen challengeListenerBot nicht challegneListener Variable als Anzahl von Intervall sehen. Ich muss jQuery verwenden, um das Intervall zu starten, wenn das Dokument fertig ist. diesen

+0

Da var ChallengeListener eine lokale Variable ist. –

+0

Wenn Sie möchten, dass die Funktion nur einmal ausgelöst wird, verwenden Sie stattdessen setTimeout. –

Antwort

4

Wechsel:

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

Um dies:

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

Das Problem ist, dass Sie in Ihrer anonymen Funktion sind zu erklären, aufgerufen, wenn das DOM ist bereit, ein neues challengneListener Variable. Es verbirgt die globale Variable und speichert nur die setInterval-ID in der lokalen Variablen, die als Garbage Collection erfasst wird, wenn die umschließende Funktion die Ausführung beendet hat.

+0

omg es funktioniert, was für ein grundlegender Fehler;) –

+0

@KamilSolarczyk. Dieser Code verwendet immer noch den bösen 'eval', den Sie beheben können, indem Sie die Zeichenfolge entfernen, geben Sie einfach die Funktionsreferenz an. – gdoron

+0

Es ist alles gut. Gute, sogar großartige Entwickler machen diese Fehler die ganze Zeit. –

0

Sie die globale Variable verbergen, entfernen Sie die var:

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

Eine andere Sache, Ihr Code verwendet eval, es so ändern:

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

Mit var innerhalb dieser Funktion erstellt eine neue Variable, die auf diese Funktion beschränkt ist, was bedeutet, dass die global definierte Variable "ChallengeListener" nicht definiert ist und daher das Intervall nicht gelöscht wird. Entfernen Sie die Variable, um diesen Code zu beheben.