Javascript 清除setTimeout()
我有一个视频列表,如果用户单击一个视频,然后在第一个视频完成之前单击第二个视频,计时器会继续运行,第二个视频会在不应该的时候更改。我曾尝试使用clearTimeout停止第一个视频计时器,但它没有任何作用Javascript 清除setTimeout(),javascript,Javascript,我有一个视频列表,如果用户单击一个视频,然后在第一个视频完成之前单击第二个视频,计时器会继续运行,第二个视频会在不应该的时候更改。我曾尝试使用clearTimeout停止第一个视频计时器,但它没有任何作用 var last_div = 0; function getVid(div_num, vid_length, count, id) { clearTimeout(timer1) time_limit = vid_length * 1000 + 4000; //plus 4
var last_div = 0;
function getVid(div_num, vid_length, count, id)
{
clearTimeout(timer1)
time_limit = vid_length * 1000 + 4000; //plus 4000 is to account for the lagging of the youtube video loading
if(last_div == 0)
{
last_div = div_num;
document.getElementById("vid_div" + div_num).style.background="#DCE4EB";
}
else
{
document.getElementById("vid_div" + last_div).style.background="";
last_div = div_num;
document.getElementById("vid_div" + div_num).style.background="#DCE4EB";
}
player.loadVideoById(id);
player.setVolume(20);
if(div_num != count)
{
div_num++;
var timer1 = setTimeout(function(){
document.getElementById("vid_div" + div_num).onclick();
},
time_limit);
}
else
{
setTimeout(function(){
document.getElementById("vid_div" + div_num).style.background="";
},
time_limit);
}
}
var timer1
是一个局部变量。这是你的问题之一。另一个问题是另一个setTimeout没有变量 将其更改为:
var last_div = 0,timer1;
function getVid(div_num, vid_length, count, id)
{
clearTimeout(timer1)
time_limit = vid_length * 1000 + 4000; //plus 4000 is to account for the lagging of the youtube video loading
if(last_div == 0)
{
last_div = div_num;
document.getElementById("vid_div" + div_num).style.background="#DCE4EB";
}
else
{
document.getElementById("vid_div" + last_div).style.background="";
last_div = div_num;
document.getElementById("vid_div" + div_num).style.background="#DCE4EB";
}
player.loadVideoById(id);
player.setVolume(20);
if(div_num != count)
{
div_num++;
timer1 = setTimeout(function(){
document.getElementById("vid_div" + div_num).onclick();
},
time_limit);
}
else
{
timer1 = setTimeout(function(){
document.getElementById("vid_div" + div_num).style.background="";
},
time_limit);
}
}
clearTimeout()
需要引用超时的id。我看到您将其中一个调用存储在timer1
中,但没有存储另一个调用。。。为什么?那只是个错误。哦,我明白了。是的,正如George所示,超时的引用需要在函数之外,因为它在下次调用时会丢失引用。