Javascript clearTimeout由于某些原因不起作用
我不确定这里的代码有什么问题,我已经设置了变量global,但是清除超时在这里仍然不起作用 谢谢,, 开尔文 这些是循环幻灯片图像和自动停止的功能Javascript clearTimeout由于某些原因不起作用,javascript,jquery,Javascript,Jquery,我不确定这里的代码有什么问题,我已经设置了变量global,但是清除超时在这里仍然不起作用 谢谢,, 开尔文 这些是循环幻灯片图像和自动停止的功能 function setLoop1(counter) { var counter4 = counter; var myID = $('a#'+counter4).attr('href'); $('ul#panel li a').removeClass('active'); $('a#'+c
function setLoop1(counter)
{
var counter4 = counter;
var myID = $('a#'+counter4).attr('href');
$('ul#panel li a').removeClass('active');
$('a#'+counter4).addClass('active');
$('#wrapperSlide').scrollTo($(myID), 800);
}
//function to stop the auto slide
function stopAuto() {
clearTimeout(myslide);
}
如我所见,这里可能有两种情况,要么是没有调用stopAuto()函数,要么是调用它时,stopAuto()函数未定义。因此,我建议在调用之前定义stopAuto()函数,并使用一些调试器工具查看控制台。您正在为每个单独的
元素启动这两个计时器:
$("ul#panel li").each(function (i) {
var counter1 = i + 1;
var myID = $('a#' + counter1).attr('href');
setLoop1(counter1, myID);
});
但是,setLoop1()
函数使用相同的两个变量。每个计时器都与其他计时器不同,并且每次调用时,setTimeout()
的返回值都是不同的值。不能在一个简单变量中存储一组不同的数字
您应该做的是将计时器存储在每个
元素的jQuery“data”属性中。然后,您的“单击”处理程序可以从中取消超时。或者,您可能不需要为每个列表项分别使用一对计时器函数。什么确保调用了stopAuto()
?每当单击“ul#panel li a”时,都会执行stopAuto();但是它没有清除超时。您确定正在调用该函数吗?您是否在其中放入了console.log()
语句,或者使用了调试器?当你这样做的时候,还要检查“myactive”和“myslide”变量的值(它们应该是整数),并且在你首先设置它们时还要添加日志记录,并确保数字相同。是的,我做了。myactive和myslide值是整数(约21000)。但是它没有被清除。仅供参考:没有必要用元素类型限定“id”查找(“#foo”);它只是减慢了速度。我检查了stopAuto()是否被调用,但clearTimeout从未清除超时。您是否在stopAuto中进行了一些操作?问题是他设置了多个计时器,列表中每个计时器对应一个。因此,这两个变量只包含最后一个变量的计时器ID。当调用stopAuto时,myactive和myslide变量初始化为null,并且在stopAuto函数调用后为这些变量分配了正确的值。所以我认为应该在调用clearTimeout之前首先提供这些变量的值。stopAuto()仅在用户单击分页链接后执行。所以myactive和myslide的值已经存在了。我已经更新了我的代码,只创建了一个计时器,但是清除超时仍然不存在working@kelvin19您只能在“单击”处理程序中设置该“当前”变量。它将始终为null
,因此,在该if
语句中,您仍然在中创建计时器。在
元素上的每个()次迭代。感谢您的回答,我终于能够清除超时。是的,我必须清除所有创建的超时。它停止了循环。
$("ul#panel li").each(function (i) {
var counter1 = i + 1;
var myID = $('a#' + counter1).attr('href');
setLoop1(counter1, myID);
});