2011-02-13 36 views
8

2 düğmeli bir sayfa oluşturmak istiyorum, 'STAY' ve 'Leave'. Düğmelerin altında bir iFrame var. Sayfa ilk kez yüklendiğinde, iFrame 10 saniye sonra otomatik olarak yenilenmeye başlar. Kullanıcı STAY düğmesine bastığında, yenilenmeyi durduracaktır. Bundan sonra LEAVE düğmesine basarsa iFrame tekrar 10 saniye sonra yenilenmeye başlayacaktır.jQuery - clearInterval ile öldürüldükten sonra setInterval nasıl yeniden başlatılır?

$(document).ready(function() { 
    var refreshIntervalId = setInterval("update()", 10000); 

    $('#leave').click(function() { 
     var refreshIntervalId = setInterval("update()", 10000);; 
    }) 

    $('#stay').click(function() { 
     clearInterval(refreshIntervalId); 
    }) 
}); 

function update(){ 
    var url = "load.php"; 
    $('iframe#ifrm').attr('src', url); 
} 

<div id="bar"> 
    <div class= "button" id="stay"> 
    <a>Stay</a> 
    </div> 
    <div class= "button" id="leave"> 
    <a>Leave</a> 
    </div> 
</div> 

ama çalışmıyor, yanlış bir şekilde clearInterval kullanıyorum: Bu kodu kullanıyorum?

cevap

11

Ayar aralığı kimliğini işlev kapsamı dışında çekmeniz gerektiğini düşünüyorum.

var refreshIntervalId; 
$('#leave').click(function() { 
     refreshIntervalId = setInterval(update, 10000); 
     }) 
$('#stay').click(function() { 
      clearInterval(refreshIntervalId); 
     }) 
}); 

Belki bazı doğrulama #leave tıklama fonksiyonunda bir değişken tanımlamak ve #stay tıklama işlevi kullanamazsınız tüm

if(refreshIntervalId!=null){ 
    // Do something with the interval id 
} 
+0

NetInterval tam olarak ne yapar? –

+0

Aralıklı zamanlayıcıyı durdurur. 'SetInterval', her 10 saniyede bir 'update' işlevini çağıran bir aralık zamanlayıcısı başlatır. 'ClearInterval' çağrısı bu zamanlayıcıyı durdurur. – rcravens

+0

böylece clearInterval'ı 4 saniye olarak adlandırırsak, setInterval fonksiyonu tekrar çağrıldığında 6 saniye kullanılacak mı? –

1

İlk ... Ayrıca refreshIntervalId değişkeni kontrol ediyor.

böyle kullanın:

var refreshIntervalId = null; 

$('#leave').click(function() { 
    refreshIntervalId = setInterval("update()", 10000); 
}) 
$('#stay').click(function() { 
    clearInterval(refreshIntervalId); 
}) 
+2

Bunu dışarıda tanımladı, sadece olay işleyicilerinde 'var' kullanmayın. – JCOC611

1

Bu bir kapsam mesele. Bu, "var" kelimesini nereye koyduğunuzda, değişkene hangi işlevlerin erişebileceğini tanımlar. Değişkeni Tricker örneğindeki gibi tüm işlevlerin dışında tanımlarsanız, belgenizdeki herhangi bir işlev bu değere erişebilir.

var refreshIntervalId = null; 

$('#leave').click(function() { 
    refreshIntervalId = setInterval("update()", 10000); 
}) 
$('#stay').click(function() { 
    clearInterval(refreshIntervalId); 
}) 

Bazen bütün belge değişkene erişimi gerekmez, böylece bir fonksiyonun içine koymak istiyorum:

TRICKER örneğinin daha önceden yayınlanmıştır.

+1

Neyin eklenme noktası @Yoram de Langen olarak cevaplandır? –

İlgili konular