2012-06-01 10 views
5

私の投稿ごとに作成する間隔がありますが、新しい投稿を読み込んで古いものを削除するという問題がありますので、間違いなく前の投稿。しかし、私はこれを行う方法を把握していないようです。誰かがこれを正しく行う方法を私に説明することができましたか?私は完全に失われています。JavaScriptで/ jQuery clearIntervalが設定されています

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

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

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

答えて

4

あなたは、データ属性でインターバルID保存することができます:

$(".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私は、配列を使用することをお勧めするつもりだった - しかし、 'data'プロパティは、この – 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

関連する問題