JS定时器无法清除?

发布于 2022-09-03 19:18:19 字数 892 浏览 13 评论 0

 function loginState(is) {
        var msg = $("#submit_btn");
        var count = 0;
        var clear = is;
        var pints_interval;
        //触发定时器
        pints_interval = setInterval(repeat, 500);
        function repeat() {
            if (clear) {
                var mval = msg.val();
                if (count < 3) {
                    count++;
                    mval += ".";
                    msg.val(mval);
                }
                else {
                    msg.val("登录");
                    count = 0;
                }
            } else if (!clear) {
                if (pints_interval) {
                    clearInterval(pints_interval); //清除定时器
                    pints_interval = null;
                }
            }
        }
    }

loginState(true);函数传入true OR false 为什么先传入true启动定时器,之后传入false无法清除定时器

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

陈甜 2022-09-10 19:18:20

你传入了true后,根据函数流程设定了定时器,传入false后,又新建了一个定时器...不过由于传入的为false,所以后面的定时器就直接被清除了...所以操作的方式不对.
可以通过其它方式来控制clear的值

 function loginState(is) {
    //.......................
       return function(){
         clear = false;
       }
 }
 var stop = loginState(true);
 stop();
 

方法有很多

淡淡離愁欲言轉身 2022-09-10 19:18:20

两次的repeat函数不是同一个(JS的函数作用域)

可以定义全局的repeat

亢潮 2022-09-10 19:18:19

诚邀。

第一次传入true和第二次传入false执行的interval是不一样的。你可以这样试试

 function loginState(is) {
        var clear = is;
        var pints_interval;
        //触发定时器
        pints_interval = setInterval(repeat, 500);
        function repeat() {
            if (clear) {
                console.log('excute interval and the id is: ' + pints_interval );
            } else if (!clear) {
                if (pints_interval) {
                    clearInterval(pints_interval); //清除定时器
                    console.log('clear intervaland the id is: ' + pints_interval );
                    pints_interval = null;
                }
            }
        }
    }

运行上诉代码,你自然就会明白。

所以你的clearInterval函数不应该写在repeat函数中。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文