为了账号安全,请及时绑定邮箱和手机立即绑定

clearTimeout不起作用

clearTimeout不起作用

慕莱坞森 2019-03-13 17:27:40
使用定时器时,有两个按钮,一个是设置定时器,一个是清除定时器,但是clearTimeout并没有起作用,控制台上还是输出,请问是为什么,哪里出错了?代码如下:<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>Document</title>    <script>       var settime=null;        function insert(){            settime=window.setTimeout(showalert,3000);        }        function showalert(){            console.log("这是显示语句");        }        function clear(){            window.clearTimeout(settime);        }    </script></head><body>    <div id="a">      <h3>setTimeout</h3>      <button onclick="insert()">显示语句</button>      <button onclick="clear()">取消显示</button>    </div></body></html>
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

啊啊,老兄,这种问题之前我也遇到过,很无措。
原因: clear 是个关键字,你试试改个名字,比如 clear1 就行了。

---补充
抱歉,回答的不太正确。
你可以这样试试(如下代码),它会打印出:ƒ clear() { [native code] }。
说明在事件处理的内部的作用域中有一个 clear 方法,它排的比较靠前,表现的就像一直会覆盖你定义的 clear 方法。

<button onclick="(function() { console.log(clear) })()">Click</button>


查看完整回答
反对 回复 2019-03-28
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

你的取消按钮不会执行的 函数名字是关键字


查看完整回答
反对 回复 2019-03-28
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

    

    可以在启动定时器的时候先清理下已有的timeout

    ```

    function insert(){

        if(settime) window.clearTimeout(settime);

        settime=window.setTimeout(showalert,3000);

    }

    

    function clear(){

        if(settime) {

            window.clearTimeout(settime);

            settime = null;

        }        

    }

    

    ```

    另外,clear为关键字,属于document对象的api,可以尝试如下代码:

    

    ```

    <script>

        document.clear = function(){

            console.log("clear是关键字");

        }

    </script>

    <a href="#" onclick="clear()">click me</a>


    ```

    所以,还需要修改清除定时器的函数名。


查看完整回答
反对 回复 2019-03-28
  • 3 回答
  • 0 关注
  • 1224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号