溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS如何實現(xiàn)發(fā)送短信驗證后按鈕倒計時功能

發(fā)布時間:2021-04-23 11:16:54 來源:億速云 閱讀:263 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關JS如何實現(xiàn)發(fā)送短信驗證后按鈕倒計時功能的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

js有什么特點

1、js屬于一種解釋性腳本語言;2、在絕大多數(shù)瀏覽器的支持下,js可以在多種平臺下運行,擁有著跨平臺特性;3、js屬于一種弱類型腳本語言,對使用的數(shù)據(jù)類型未做出嚴格的要求,能夠進行類型轉換,簡單又容易上手;4、js語言安全性高,只能通過瀏覽器實現(xiàn)信息瀏覽或動態(tài)交互,從而有效地防止數(shù)據(jù)的丟失;5、基于對象的腳本語言,js不僅可以創(chuàng)建對象,也能使用現(xiàn)有的對象。

應用場景

在開發(fā)“發(fā)送短信驗證”功能時候,要解決一個問題,防止惡意或頻繁發(fā)送短信驗證碼問題。一般原理是“當點擊發(fā)送按鈕時,發(fā)送ajax請求到服務器發(fā)送短信驗證碼,成功則把發(fā)送按鈕設置為不可點擊,并且調用定時器,按鈕顯示倒計時”。如果就這樣不對倒計時存儲做處理,那么當刷新頁面,會出現(xiàn)倒計時失效,按鈕可點擊。提供以下解決方案:

  • 利用cookie存儲倒計時

  • 利用HTML5的localStorage 存儲倒計時

利用cookie存儲倒計時

發(fā)送成功后把剩余倒計時存儲到cookie,當頁面刷新時,檢查cookie 是否還存儲著剩余倒計時?,如果有,發(fā)送按鈕則保持倒計時狀態(tài),不可點擊,否則發(fā)送按鈕可點擊。

HTML代碼

<input type="button" id="btn" disabled="disabled" value="獲取驗證碼">

jQuery代碼

<!--引入jquery.cookie.js 插件-->
<script src="http:jquery.cookie.js" type="text/javascript" charset="utf-8"></script>
<!--邏輯功能代碼 -->
<script>
  $(function(){
   if($.cookie("total")!=undefined&&$.cookie("total")!='NaN'&&$.cookie("total")!='null'){//cookie存在倒計時
     timekeeping();
   }else{//cookie 沒有倒計時
     $('#btn').attr("disabled", false);
   }
   function timekeeping(){
    //把按鈕設置為不可以點擊
    $('#btn').attr("disabled", true);
    var interval=setInterval(function(){//每秒讀取一次cookie
     //從cookie 中讀取剩余倒計時
     total=$.cookie("total");
     //在發(fā)送按鈕顯示剩余倒計時
     $('#btn').val('請等待'+total+'秒');
     //把剩余總倒計時減掉1
     total--;
     if(total==0){//剩余倒計時為零,則顯示 重新發(fā)送,可點擊
     //清除定時器
     clearInterval(interval);
     //刪除cookie
     total=$.cookie("total",total, { expires: -1 });
     //顯示重新發(fā)送
     $('#btn').val('重新發(fā)送');
     //把發(fā)送按鈕設置為可點擊
     $('#btn').attr("disabled", false);
     }else{//剩余倒計時不為零
     //重新寫入總倒計時
     $.cookie("total",total);
     }
    },1000);
   }
   //綁定發(fā)送按鈕
    $('#btn').click(function(event) {
   /* Act on the event */
   // alert($("#btn").val());
   //校驗手機號碼
   var phone=$('#phone').val();
   var pre=/^[1][358][0-9]{9}$/;
   if(phone==''){
     layer.open({
       content: '手機號碼不能為空',
       time: 2
     });
     return this;
   }else{
     var pre=/^[1][358][0-9]{9}$/;
     if(!pre.test(phone)){
      layer.open({
        content: '手機號碼格式有誤!',
        time: 2
      });
       return this;
     }
   }
   $.ajax({
    url: '',//服務器發(fā)送短信
    type: 'GET',
    dataType: 'json',
    data: {phone: phone},
   })
   .done(function(re) {
      var str="發(fā)送短信驗證碼成功,請注意查看您的手機";
      // console.log(re);
      if(re){
        $.cookie("total",60);
        timekeeping();
      }else{
        switch (re[0]) {
         case '160038':
          str="短信驗證碼發(fā)送過頻繁";
          break; 
         case '160034':
          str="號碼黑名單";
          break; 
         case '160000':
          str="系統(tǒng)錯誤";
          break;
         case '000000':
          str="發(fā)送成功";
          break;
         case '112300':
          str="接收短信的手機號碼為空";
          break; 
         case '160040':
          str="驗證碼超出發(fā)送上限";
          break;
         case '160042':
          str="號碼格式有誤";
          break; 
         default:
          str="發(fā)送驗證碼失敗";
          break;
        }
      }
      layer.open({
         content: str,
         time: 2
       });
   })
   .fail(function() {
    console.log("error");
   })
   .always(function() {
    console.log("complete");
   });
  });
  })
</script>

感謝各位的閱讀!關于“JS如何實現(xiàn)發(fā)送短信驗證后按鈕倒計時功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

js
AI