Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript clearTimeout由于某些原因不起作用_Javascript_Jquery - Fatal编程技术网

Javascript clearTimeout由于某些原因不起作用

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

我不确定这里的代码有什么问题,我已经设置了变量global,但是清除超时在这里仍然不起作用

谢谢,, 开尔文

这些是循环幻灯片图像和自动停止的功能

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