var TimeOut; //Global
$('[name^="HMapDot"]').each(function(i){
TimeOut = setTimeout(function(){
$('[name^="HMapDot"]').css({'visibility':'hidden'});
$('#HMapTime').html($('[name="HMapDot'+i+'"]').attr('role')+' [ '+(i+1)+' ]');
$('[name="HMapDot'+i+'"]').css({'visibility':'visible'});
},i * iTime);
if(i == (iMany-1) || $('[name^="HMapDot"]').length == 0){ clearTimeout(TimeOut); return false; }
});
我有这段代码工作得很好,使用JQuery 2.x和AJAX来拉取数据。我的意图是延迟“地图”上的点每秒出现/消失(滑块值)。现在当我点击“停止”时,页面,值,元素将被$ .remove,但计时器将继续被倒计数。如何停止计时器和$ .each?低于
修改代码的工作:
var TimeOuts = []; //Global
var T;
function ClearTimeOuts(){
for(var i in TimeOuts){
clearTimeout(TimeOuts[i]);
}
}
$('[name^="HMapDot"]').each(function(i){
T = setTimeout(function(){
$('[name^="HMapDot"]').css({'visibility':'hidden'});
$('#HMapTime').html($('[name="HMapDot'+i+'"]').attr('role')+' [ '+(i+1)+' ]');
$('[name="HMapDot'+i+'"]').css({'visibility':'visible'});
if(i == (iMany-1) || $('[name^="HMapDot"]').length == 0){
ClearTimeOuts();
return false;
}
},i * iTime);
TimeOuts.push(T);
});
这一个sorta工程,但是当我使用这个代码,它不会显示任何东西,直到点的结束。仍然在修补。 – sgkdnay
好的,发现这个问题。因为if(i ==(iMany-1)|| $('[name^=“HMapDot”]')。length == 0){ClearTimeOuts();返回false; }在定时器之外,setTimeout不知道它何时结束,所以我将该行移到了setTimeout的内部,当我按下停止按钮时,它优雅地退出。非常感谢您带领我走向正确的方向!请参阅上面有关修改过的代码! – sgkdnay