2016-03-29 25 views
0

Hala javascript alışmaya ve ben bunu nasıl emin değilim .. Bir sayfada hata ve başarı mesajları göndermek için aralıkları kullanıyorum ve bazı sorunlarla karşılaştılarJavaScript clearInterval

.

ı var diyelim bir aşağıdadır:

function setMyInterval(element) { 
    var timer = setInterval(function() { 
     // add some child nodes to element 
     // play with the css 
    }, 20); 
    return timer; 
} 

function callMyInterval() { 
    var parent = document.getElementById("element"); 
    var myIntervalRef; 
    if(!parent.firstChild) { 
     myIntervalRef = setMyInterval(parent); 
    } else { 
     clearInterval(myIntervalRef); 
     while(parent.firstChild) { 
      parent.removeChild(parent.firstChild); 
     } 
     myIntervalRef = setMyInterval(parent); 
    } 
} 

<button onclick="callMyInterval();" >Reset</button> 

nasıl bu durumda aralığı açacak? Yukarıdaki birkaç varyasyonu denedim, ancak başarılı değil. Sorunun, myIntervalRef'in önceki işlev çağrısına bir başvuru olmaması nedeniyle olduğunu düşünüyorum, ancak bunu nasıl düzelteceğimi bilmiyorum.

Gelişmiş tüm herkese teşekkürler! Kodunuzda

cevap

0

Basit, dışında myIntervalRef taşıyın. , diğer işlevlerin numarasına erişmesini ve değişiklik yapmasını sağlar.

// Moving the function reference outside of the method, so other function can access it. 

var myIntervalRef; 

function setMyInterval(element) { 
    var timer = setInterval(function() { 
     // add some child nodes to element 
     // play with the css 
    }, 20); 
    return timer; 
} 

function callMyInterval() { 
    var parent = document.getElementById("element"); 
    if(!parent.firstChild) { 
     myIntervalRef = setMyInterval(parent); 
    } else { 
     clearInterval(myIntervalRef); 
     while(parent.firstChild) { 
      parent.removeChild(parent.firstChild); 
     } 
     myIntervalRef = setMyInterval(parent); 
    } 
} 

<button onclick="callMyInterval();" >Reset</button> 

Bu yardımcı olur umarım.

+0

Teşekkür ederiz! O dakika sonra yakaladım. Anladım, teşekkürler! Yine de bir daha sorusu, tekrar temizlemenizi önerdiğinizde, bu öneri 4 satırdan biraz önce temizlediğimden ve bu açık çağrıdan bu yana hiç aramamış olduğumdan beri gerekli midir? – user1807880

+0

Oops, üzgünüm kötü, üstünde 'clearInterval()' fark etmedi. Ben eklediğim 'clearInterval()' ı kaldırabilirsiniz. – yihyang

0

:

var myIntervalRef; 

senin fonksiyonun yerel değişken mi, küresel hale Sen sonraki çağrılar böylece fonksiyon kapsamı dışında aralık değişken tanımlamak gerekir

1

düzeltmek için en hızlı yoldur callMyInterval, aynı örneğe başvurur.

İşlevsel olarak yerel işlev alanında tanımladınız, böylece callMyInterval numaralı her arama yeni bir değişken örneğine başvurur, böylece önceki zamanlayıcıya başvurmazsınız. küresel erişilebilir işlev yapacak şekilde

var myIntervalRef; 

function callMyInterval() { 
    var parent = document.getElementById("element"); 
    if (parent.firstChild) { 
    clearInterval(myIntervalRef); 
    while (parent.firstChild) { 
     parent.removeChild(parent.firstChild); 
    } 
    } 
    myIntervalRef = setMyInterval(parent); 
}