在.each中设置JavaScript / jQuery clearInterval

时间:2012-06-01 09:56:08

标签: javascript jquery ajax setinterval clearinterval

所以我为每个帖子创建了一个间隔,问题是我加载了新帖子并删除了旧帖子,所以显然我想停止之前帖子的间隔。但是我似乎无法弄清楚如何做到这一点。有人可以向我解释如何正确地做这件事吗?我完全迷失了。

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

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

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

2 个答案:

答案 0 :(得分:5)

您可以将间隔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"));
});
和SiGa​​nteng说的那样,你应该把一个函数对象传递给setInterval,而不是一个字符串,只能获得eval'd。

答案 1 :(得分: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 = [];
});