无法清除定时器

$(document).ready(function() {

$(".center-gold-pic").on("click",function(){
    var timer=''
    var div=$("#animation-pic");
    div.addClass("hide");
    var divs=$("#animation-pics");
    divs.addClass('show');
    //判断状态
if (divs.hasClass('stop')){
         divs.removeClass('stop');
         //定时发送请求
         timer=setInterval(function(){
           var left = Math.ceil(Math.random() * (9 - 0) + 0) * 22;
           var top = Math.ceil(Math.random() * (9 - 0) + 0) *22;

       $.post('ajax.txt', function(data) {
            if(data==1){
              var imgObj=$(document.createElement("div")) ;
              imgObj.css({
                  "left":left+10,
                  "top":top+10,
                  "background-repeat":"no-repeat",
                   "background-position":"center",
                   "background-size":"cover",
                   "height":"35px",
                    "width":"35px",
                    "border-radius":"100%",
                    "position":"absolute",
                   "background-image":"url(./imgs/images/7.png)",
                  });
              $("#scan-gold-picc").append(imgObj);
             
             }else{
                setTimeout(function(){show1();}, 4000)
                 };
            });
        
       },5000);

  }else{
      alert(123)
      divs.addClass('stop');
      clearInterval(timer); 
       return;
      }

});

当我再次点击的时候发现定时器不能清除;但是我用alert(123)的时候能够正常宣示

阅读 3.9k
1 个回答
 var timer=''

写在事件绑定外面。
写在里面每次执行的时候不是同一个函数作用域。上一个函数作用域内的变量已经被销毁。
修改一下,刚才console查看不是undefined,是个空,只能确定else里的timer不是if中的那一个。

或者不想增加全局变量的话可以添加给dom对象(不是jQuery对象)

divs[0].timer=setInterval()
clearInterval(divs[0].timer); 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题