Zatrzymanie setInterval niemożliwe

0

Dzień dobry,
wiąże się z takim oto problemem:

Mam dwa przyciski czyli dwa zdarzenia:

  1. wciskam i jednorazowo ładuje się do diva zawartość z jakiegoś pliku.
  2. wciskam i co 3 sekundy ładuje się taka sama zawartość do tego samego diva

wciskając ponownie przycisk nr 1 powinno zatrzymać mój setinterval i raz załadować treść do diva. I jak ponownie wcisnę to tylko raz ponownie powinien się div zapełnić treścią.

Niby działa ale z małym błędem.
Nie zatrzymuje się interval i dopiero po kilkukrotnym wciskaniu przycisku nr 1 skrypt zalapuje i zatrzymuje setintervala.

kod:

<script>
var czas=false;

//do menu nie ważne
$('#menu).draggable(); 
//do menu nie ważne
$('#linki a').click(function(){
	$(this).attr('target', '_blank');
});


//ręcznie PRZYCISK NR 1
$('#przycisk1').click(function(){	
	if (czas){
		clearInterval(czas);
           czas=false;
	}
else
{
	$('#tresc').load('./felietony.php'); 
}

});

//automatycznie co 3 sekundy PRZYCISK NR 2
$('#przycisk2').click(function(){
	
	if (czas){
		clearInterval(czas);
czas=false;
	}
	 czas = setInterval(function(){ $('#tresc').load('./felietony.php'); }, 3000);

	
});

</script>
2

clearInterval() nie powoduje zatrzymania obecnie działającego kodu - tzn. jeśli $('#tresc').load('./felietony.php'); zdążyło się już uruchomić (i działa sobie w tle, oczekując na dane z serwera), clearInterval() nie spowoduje anulowania tej operacji.

Aby anulować taki "in-flight load", musiałbyś zamienić $.load() na $.ajax() i wykorzystać metodę .abort(): https://stackoverflow.com/questions/3002668/aborting-jquery-load

0

dzięki tak ale powinno zatrzymać to całe wczytywanie (co ładuje się co 3 sekundy). I tylko wczytywać jak nacisnę przycisk nr 1.
Czyli zatrzymać cały Interval a nie zatrzymuje

0

Obstawiałbym, że setInterval() zwraca 0 dla pierwszego timera, przez co za pierwszym razem Twój kod wchodzi w else.

Spróbuj porównywać tak:

if (czas === false) {
  /* ... */
} else {
  /* ... */
}
0

niestety to samo. Pozbywam się wszystkich if dotyczących sprawdzania i tak samo się dzieje.

<script>
var czas;


//ręcznie PRZYCISK NR 1
$('#przycisk1').click(function(){   
        clearInterval(czas);
    $('#tresc').load('./felietony.php'); 
});

//automatycznie co 3 sekundy PRZYCISK NR 2
$('#przycisk2').click(function(){
     czas = setInterval(function(){ 
     $('#tresc').load('./felietony.php'); }, 3000);
});

</script>
0

Możesz wrzucić poprawiony kod?

0

nadal nic zaraz zrobię Ajax ale nie wiem za bardzo jak.
Kurcze chcę tylko zatrzymać Interwał jednym przyciskiem i go uruchomić innym przyciskiem.
Dziwna sprawa

1 użytkowników online, w tym zalogowanych: 0, gości: 1