2012-06-01 5 views
5

Also habe ich ein Intervall, das ich für jeden meiner Beiträge erstellt habe, das Problem ist, dass ich neue Beiträge lade und die alten entferne, also möchte ich natürlich das Intervall anhalten die vorherigen Beiträge. Allerdings kann ich nicht herausfinden, wie das geht. Könnte mir jemand erklären, wie man das richtig macht? Ich bin völlig verloren.JavaScript/jQuery clearInterval wird in .each gesetzt

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

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

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

Antwort

4

können Sie speichern die Intervall-ID in einem Datenattribut:

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

und deaktivieren Sie das Intervall spezifisch für jede .post etwa so:

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

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

und wie SiGanteng sagte, sollten Sie übergeben Sie ein Funktionsobjekt an setInterval statt eine Zeichenfolge, die nur eval 'd.

+0

+1 Ich schlage vor, würde ein Array mit - aber die 'data' Eigenschaft ist ideal für diese – ManseUK

+0

Ihnen sehr danken. – Ian

2

Sie müssen für jedes Intervall einen Griff halten, die Sie beginnen:

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 können Sie ein assoziatives Array mit der ID als Schlüssel verwenden – ManseUK