clearTimeout由于某种原因不起作用

时间:2012-10-11 04:38:08

标签: javascript jquery

我不确定我的代码在这里出了什么问题,我已经将变量设置为全局但是明确的超时仍然无效。

谢谢你, 开尔文

var myslide = null;
$(document).ready(function () {
    var current = null;

    $('ul#panel li a').click(function () {
        stopAuto();
        $('ul#panel li a').removeClass('active');
        $(this).addClass('active');
        current = $(this).attr('href');
        $('#wrapperSlide').clearQueue();
        $('#wrapperSlide').scrollTo($(current), 800);
        return false;
    });

    if (current==null)
    { 
        $("ul#panel li").each(function(i){
        var counter1 = i+1;
        var timer1 = counter1 * 5000;
        myslide = setTimeout(function(){
        setLoop1(counter1);
        },timer1);
    });
    } else {
        $('#wrapperSlide').clearQueue();
        return false;
    }
});

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

的功能
  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);
}

2 个答案:

答案 0 :(得分:2)

您为每个单独的<li>元素启动了这两个计时器:

    $("ul#panel li").each(function (i) {
        var counter1 = i + 1;
        var myID = $('a#' + counter1).attr('href');
        setLoop1(counter1, myID);
    });

但是,setLoop1()函数使用相同的两个变量。每个计时器与其他计时器不同,每次调用时setTimeout()的返回值都是不同的值。你不能在一个简单的变量中存储一堆不同的数字。

您应该做的是将计时器存储在每个<li>元素的jQuery“data”属性中。然后你的“点击”处理程序可以从那里取消超时。或者,您可能不需要为每个列表项单独使用一对计时器函数。

答案 1 :(得分:0)

我可以看到两种情况,或者没有调用 stopAuto()函数,或者如果正在调用它, stopAuto()函数是未定义的什么时候叫它。所以我建议在调用之前定义 stopAuto()函数,并使用一些调试工具来查看控制台。