鍍金池/ 問答/HTML/ clearTimeout不起作用

clearTimeout不起作用

使用定時器時,有兩個按鈕,一個是設(shè)置定時器,一個是清除定時器,但是clearTimeout并沒有起作用,控制臺上還是輸出,請問是為什么,哪里出錯了?
代碼如下:

<!DOCTYPE html>
<html lang="en">
<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>
回答
編輯回答
怪痞

你的取消按鈕不會執(zhí)行的 函數(shù)名字是關(guān)鍵字

2017年5月3日 01:49
編輯回答
絯孑氣

啊啊,老兄,這種問題之前我也遇到過,很無措。
原因: clear 是個關(guān)鍵字,你試試改個名字,比如 clear1 就行了。

---補充
抱歉,回答的不太正確。
你可以這樣試試(如下代碼),它會打印出:? clear() { [native code] }。
說明在事件處理的內(nèi)部的作用域中有一個 clear 方法,它排的比較靠前,表現(xiàn)的就像一直會覆蓋你定義的 clear 方法。

<button onclick="(function() { console.log(clear) })()">Click</button>
2017年1月2日 06:06
編輯回答
短嘆
    
    可以在啟動定時器的時候先清理下已有的timeout
    ```
    function insert(){
        if(settime) window.clearTimeout(settime);
        settime=window.setTimeout(showalert,3000);
    }
    
    function clear(){
        if(settime) {
            window.clearTimeout(settime);
            settime = null;
        }        
    }
    
    ```
    另外,clear為關(guān)鍵字,屬于document對象的api,可以嘗試如下代碼:
    
    ```
    <script>
        document.clear = function(){
            console.log("clear是關(guān)鍵字");
        }
    </script>
    <a href="#" onclick="clear()">click me</a>

    ```
    所以,還需要修改清除定時器的函數(shù)名。
2017年11月23日 05:08