2012-06-01 9 views
5

में सेट किया जा रहा है, इसलिए मेरे पास प्रत्येक पोस्ट के लिए एक अंतराल है, मुद्दा यह है कि मैं नई पोस्ट लोड करता हूं और पुराने को हटा देता हूं, इसलिए जाहिर है कि मैं अंतराल को रोकना चाहता हूं पिछली पोस्ट हालांकि मुझे यह पता लगाना प्रतीत नहीं होता कि यह कैसे करें। क्या कोई मुझे बता सकता है कि यह करने के बारे में सही तरीके से कैसे जाना है? मैं पूरी तरह से खो गया हूँ।जावास्क्रिप्ट/jQuery स्पष्ट इंटरवल को .each

$(".post").each(function(){ 
    myInterval = setInterval("postStats('"+$(this).attr('id')+"')", 500); 
}); 

function postStats(pid) { 
    //do some stuff 
} 

$(".button").click(function(){ 
    clearInterval(myInterval); 
}); 

उत्तर

4

आप एक डेटा विशेषता में अंतराल आईडी स्टोर कर सकते हैं:

$(".post").each(function() { 
    var that = this; 
    var myInterval = setInterval(function() { 
     postStats(that.id); 
    }, 500); 
    $(this).data("i", myInterval); 
}); 

और अंतराल के लिए विशिष्ट स्पष्ट प्रत्येक .post तो जैसे:

$(".button").click(function() { 

    // assuming the button is inside a post 
    clearInterval($(this).closest(".post").data("i")); 
}); 

और तरह SiGanteng ने कहा, आपको चाहिए एक स्ट्रिंग के बजाय setInterval पर एक फ़ंक्शन ऑब्जेक्ट पास करें, जो केवल eval 'डी प्राप्त करता है।

+0

+1 मैं एक सरणी उपयोग करने का सुझाव लिए जा रहा था - लेकिन 'डेटा' संपत्ति एकदम सही है के लिए इस – ManseUK

+0

आपको बहुत बहुत धन्यवाद। – Ian

2

आप प्रत्येक अंतराल है कि आप शुरू के लिए एक संभाल रखने की जरूरत है:

var myIntervals = []; 

$(".post").each(function(){ 
    var id = $(this).attr('id'); 
    var handle = window.setInterval(function(){ 
    postStats(id); 
    }, 500); 
    myIntervals.push(handle); 
}); 

function postStats(pid) { 
//do some stuff 
} 

$(".button").click(function(){ 
    $.each(myIntervals, function(i, val){ 
    window.clearInterval(val); 
    }); 
    myIntervals = []; 
}); 
+0

+1 आप 'id' का उपयोग करके एक सहयोगी सरणी का उपयोग कर सकते हैं – ManseUK