1. 程式人生 > >JS實現60s倒計時(親測有效),及span標籤如何使用和禁用onclick事件

JS實現60s倒計時(親測有效),及span標籤如何使用和禁用onclick事件

效果如下圖:點選按鈕出現60秒倒計時,60s內按鈕不可用,倒計時到了時間方可再次點選獲取。


另外還有一個知識點,只有input 及button這樣的表單元素有disbale屬性,如何設定是否可用屬性的方法一般用$("#id").attr('disbaled','true')及$("#id").prop('disbaled','false'),對span img這樣的沒有disbale的屬性,這種方法就不起作用了,此時可用$("#id").setAttribute('onclick',function())或$("#id").removeAttribute("onclick")方法來設定事件是否可用。

以下是所有程式碼,複製即可使用:

<!DOCTYPE html>
<html>
<head>
    <title>驗證碼倒計時</title>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <style type="text/css" >
        .validate-div input{
            width:130px;
            float:left;
            line-height:30px;
        }
        .validation{
            float:left;
            width: 85px;
            background-color: #2eaef1;
            border-radius: 5px;
            margin-left: 20px;
            text-align: center;
            margin-top: 3px;
        }
        .validation span{
            color: #fff;
            line-height:30px;
            font-size: 14px;
        }
    </style>
</head>

<body>
<div class="validate-div">
    <input type="text" class="validation-code" id="validation-code" name="smscode" placeholder="輸入驗證碼" >
    <div class="validation">
        <span class="" id="validate_span" onclick="sendsms(this);">獲取驗證碼</span>
    </div>
</div>
</body>
</html>

<script type="text/javascript">
    //傳送驗證碼函式
    function sendsms(e){
        /*傳送驗證碼功能*/
        countdown(e);                                   //若傳送驗證碼成功,則呼叫倒計時函式
    }
    //倒計時函式
    var time = 10;
    function countdown(e){
        if (time == 0) {
            //e.setAttribute('disabled',false);         對沒有disbaled屬性的span標籤,此方法無效
            e.setAttribute("onclick","sendsms(this)");
            $("#validate_span").html("獲取驗證碼");
            time = 10;
        }else{
            //e.attr('disabled',true);                  對沒有disbaled屬性的span標籤,此方法也無效
            //e.setAttribute("onclick", '');            這樣寫也可以
            e.removeAttribute("onclick");
            $("#validate_span").html("重新發送(" + time + ")");
            time--;
            setTimeout(function() {
                countdown(e)
            },1000)
        }
    }
</script>
</body>
</html>