5

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

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

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

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

2 回答 2

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"));
});

就像 SiGanteng 说的,你应该传递一个函数对象setInterval而不是一个字符串,它只会得到eval'd。

于 2012-06-01T10:00:36.127 回答
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 = [];
});
于 2012-06-01T10:02:14.877 回答