JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)


Posted in Javascript onJuly 07, 2017

应用场景

在开发“发送短信验证”功能时候,要解决一个问题,防止恶意或频繁发送短信验证码问题。一般原理是“当点击发送按钮时,发送ajax请求到服务器发送短信验证码,成功则把发送按钮设置为不可点击,并且调用定时器,按钮显示倒计时”。如果就这样不对倒计时存储做处理,那么当刷新页面,会出现倒计时失效,按钮可点击。提供以下解决方案:

  • 利用cookie存储倒计时
  • 利用HTML5的localStorage 存储倒计时

利用cookie存储倒计时

发送成功后把剩余倒计时存储到cookie,当页面刷新时,检查cookie 是否还存储着剩余倒计时?,如果有,发送按钮则保持倒计时状态,不可点击,否则发送按钮可点击。

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");
     //在发送按钮显示剩余倒计时
     $('#btn').val('请等待'+total+'秒');
     //把剩余总倒计时减掉1
     total--;
     if(total==0){//剩余倒计时为零,则显示 重新发送,可点击
     //清除定时器
     clearInterval(interval);
     //删除cookie
     total=$.cookie("total",total, { expires: -1 });
     //显示重新发送
     $('#btn').val('重新发送');
     //把发送按钮设置为可点击
     $('#btn').attr("disabled", false);
     }else{//剩余倒计时不为零
     //重新写入总倒计时
     $.cookie("total",total);
     }
    },1000);
   }
   //绑定发送按钮
    $('#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: '',//服务器发送短信
    type: 'GET',
    dataType: 'json',
    data: {phone: phone},
   })
   .done(function(re) {
      var str="发送短信验证码成功,请注意查看您的手机";
      // console.log(re);
      if(re){
        $.cookie("total",60);
        timekeeping();
      }else{
        switch (re[0]) {
         case '160038':
          str="短信验证码发送过频繁";
          break; 
         case '160034':
          str="号码黑名单";
          break; 
         case '160000':
          str="系统错误";
          break;
         case '000000':
          str="发送成功";
          break;
         case '112300':
          str="接收短信的手机号码为空";
          break; 
         case '160040':
          str="验证码超出发送上限";
          break;
         case '160042':
          str="号码格式有误";
          break; 
         default:
          str="发送验证码失败";
          break;
        }
      }
      layer.open({
         content: str,
         time: 2
       });
   })
   .fail(function() {
    console.log("error");
   })
   .always(function() {
    console.log("complete");
   });
  });
  })
</script>

以上所述是小编给大家介绍的JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
网页中可关闭的漂浮窗口实现可自行调节
Aug 20 Javascript
一个很有趣3D球状标签云兼容IE8
Aug 22 Javascript
IE6浏览器中window.location.href无效的解决方法
Nov 20 Javascript
node.js解决获取图片真实文件类型的问题
Dec 20 Javascript
理解JS绑定事件
Jan 19 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
Aug 16 Javascript
原生js封装添加class,删除class的实例
Nov 06 Javascript
vue写一个组件
Apr 09 Javascript
讲解vue-router之什么是动态路由
May 28 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
Aug 22 Javascript
element ui 表格动态列显示空白bug 修复方法
Sep 04 Javascript
详解vue-cli中使用rem,vue自适应
May 06 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 #Javascript
JS实现搜索关键词的智能提示功能
Jul 07 #Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 #Javascript
javascript ES6 新增了let命令使用介绍
Jul 07 #Javascript
微信小程序之绑定点击事件实例详解
Jul 07 #Javascript
分享19个JavaScript 有用的简写写法
Jul 07 #Javascript
Vue.js数据绑定之data属性
Jul 07 #Javascript
You might like
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
php解析xml方法实例详解
2015/05/12 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
javascript 进度条 实现代码
2009/07/30 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
Python实现Restful API的例子
2019/08/31 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
Linux如何为某个操作添加别名
2015/02/05 面试题
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
期末自我鉴定
2014/02/02 职场文书
个人安全承诺书
2014/05/22 职场文书
体育教师求职信
2014/05/24 职场文书
儿园租房协议书范本
2014/12/02 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
毕业典礼主持词
2015/06/29 职场文书
生日宴会祝酒词
2015/08/10 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS