所以我为每个帖子创建了一个间隔,问题是我加载了新帖子并删除了旧帖子,所以显然我想停止之前帖子的间隔。但是我似乎无法弄清楚如何做到这一点。有人可以向我解释如何正确地做这件事吗?我完全迷失了。
$(".post").each(function(){
myInterval = setInterval("postStats('"+$(this).attr('id')+"')", 500);
});
function postStats(pid) {
//do some stuff
}
$(".button").click(function(){
clearInterval(myInterval);
});
答案 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"));
});
和SiGanteng说的那样,你应该把一个函数对象传递给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 = [];
});