v2.5.2
Giriş yap

setInterval sorunu

medesan
378 defa görüntülendi

Merhaba arkadaşlar, birtane select elementim var. Listeden bir elaman seçildiğinde onChange olayı gerçekleşiyor ve setInterval() bulunan fonksiyon tetikleniyor. Buraya kadar bir sorunum yok. Ancak listeden yeni bir elaman seçtiğimde setInterval() önceki veriyi gösteriyor. clearInterval() de bi işe yaramadı. Bu konuda bana yardımcı olabilirseniz sevinirim.

örnek kod

Cevap yaz
Cevaplar (1)
ebykdrms
742 gün önce

Merhaba,

örnek kodunuzu inceledim. countdownInterval değişkenini IftarSahurHesapla fonksiyonu içinde tanımladığınız için SetInterval fonksiyonunuzda aslında istediğiniz countdownInterval değişkenine değer atamıyorsunuz. Aslında yeni bir countdownInterval değişkeni oluşturuyorsunuz. Aynı şekilde StopInterval fonksiyonunuzda da countdownInterval değişkenine ulaşamadığınız için istediğiniz interval'i durduramamış oluyorsunuz.
countdownInterval değişkenini, 3 fonksiyonun da kapsayıcısı olan bir blokta tanımlamalısınız. Yani aslında function IftarSahurHesapla() satırınızın bir satır üstünde tanımlarsanız 3 fonksiyon da aynı değişkene ulaşabilecektir.

function IftarSahurHesapla(targetLocationId)
{	
	var countdownInterval = null;
	var $test = $("#imsakiye").eq(0);
	//...

yerine

var countdownInterval = null;
function IftarSahurHesapla(targetLocationId)
{	
	var $test = $("#imsakiye").eq(0);
	//...

Bir de interval'i durdurduktan sonra yeniden başlatmalısınız. Yani

if(countdownInterval == null) {
	SetInterval(BugunImsakDate, bugunAksamDate, yarinImsakDate, $countdown);
}
else{
	StopInterval(countdownInterval);
}

yerine

if(countdownInterval == null) {
	SetInterval(BugunImsakDate, bugunAksamDate, yarinImsakDate, $countdown);
}
else{
	StopInterval(countdownInterval);
    SetInterval(BugunImsakDate, bugunAksamDate, yarinImsakDate, $countdown);
}

veya SetInterval fonksiyonu her halükârda çalıştırılacağı için şu 2 satır da aynı işi görür:

if(countdownInterval) StopInterval(countdownInterval);
SetInterval(BugunImsakDate, bugunAksamDate, yarinImsakDate, $countdown);