js实现发送验证码后的倒计时功能


Posted in Javascript onMay 28, 2015

之前分享过只用js实现倒计时的功能,后来测试时发现,刷新或关闭网页后,倒计时就不能用了.网上也没找到合适的解决方案,所以自己就写了个,这次的算是优化版吧,能满足刷新或重新打开网页后,倒计时依然能用

特别说明:

     cookie最初创建的有效时间是60秒.也就是说,你如果在倒计时为20的时候,关闭网页.20秒之后再打开,是不会有倒计时显示的;但是,如果倒计时为20时,关闭页面,如果在20秒内重新打开页面,是有倒计时显示的.

html代码

<input id="second" type="button" value="免费获取验证码" />

js对cookie的操作

//发送验证码时添加cookie
function addCookie(name,value,expiresHours){ 
  var cookieString=name+"="+escape(value); 
  //判断是否设置过期时间,0代表关闭浏览器时失效
  if(expiresHours>0){ 
    var date=new Date(); 
    date.setTime(date.getTime()+expiresHours*1000); 
    cookieString=cookieString+";expires=" + date.toUTCString(); 
  } 
    document.cookie=cookieString; 
} 
//修改cookie的值
function editCookie(name,value,expiresHours){ 
  var cookieString=name+"="+escape(value); 
  if(expiresHours>0){ 
   var date=new Date(); 
   date.setTime(date.getTime()+expiresHours*1000); //单位是毫秒
   cookieString=cookieString+";expires=" + date.toGMTString(); 
  } 
   document.cookie=cookieString; 
} 
//根据名字获取cookie的值
function getCookieValue(name){ 
   var strCookie=document.cookie; 
   var arrCookie=strCookie.split("; "); 
   for(var i=0;i<arrCookie.length;i++){ 
    var arr=arrCookie[i].split("="); 
    if(arr[0]==name){
     return unescape(arr[1]);
     break;
    }else{
       return ""; 
       break;
     } 
   } 
    
}

主要逻辑代码

$(function(){
  $("#second").click(function (){
    sendCode($("#second"));
  });
  v = getCookieValue("secondsremained");//获取cookie值
  if(v>0){
    settime($("#second"));//开始倒计时
  }
})
//发送验证码
function sendCode(obj){
  var phonenum = $("#phonenum").val();
  var result = isPhoneNum();
  if(result){
    doPostBack('${base}/login/getCode.htm',backFunc1,{"phonenum":phonenum});
    addCookie("secondsremained",60,60);//添加cookie记录,有效时间60s
    settime(obj);//开始倒计时
  }
}
//将手机利用ajax提交到后台的发短信接口
function doPostBack(url,backFunc,queryParam) {
  $.ajax({
    async : false,
    cache : false,
    type : 'POST',
    url : url,// 请求的action路径
    data:queryParam,
    error : function() {// 请求失败处理函数
    },
    success : backFunc
  });
}
function backFunc1(data){
  var d = $.parseJSON(data);
  if(!d.success){
    alert(d.msg);
  }else{//返回验证码
    alert("模拟验证码:"+d.msg);
    $("#code").val(d.msg);
  }
}
//开始倒计时
var countdown;
function settime(obj) { 
  countdown=getCookieValue("secondsremained");
  if (countdown == 0) { 
    obj.removeAttr("disabled");  
    obj.val("免费获取验证码"); 
    return;
  } else { 
    obj.attr("disabled", true); 
    obj.val("重新发送(" + countdown + ")"); 
    countdown--;
    editCookie("secondsremained",countdown,countdown+1);
  } 
  setTimeout(function() { settime(obj) },1000) //每1000毫秒执行一次
} 
//校验手机号是否合法
function isPhoneNum(){
  var phonenum = $("#phonenum").val();
  var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/; 
  if(!myreg.test(phonenum)){ 
    alert('请输入有效的手机号码!'); 
    return false; 
  }else{
    return true;
  }
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
Sep 15 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
jQuery中click事件用法实例
Dec 26 Javascript
Bootstrap Chart组件使用教程
Apr 28 Javascript
JS模拟的Map类实现方法
Jun 17 Javascript
jQuery实现根据生日计算年龄 星座 生肖
Nov 23 Javascript
vue 页面加载进度条组件实例
Feb 05 Javascript
微信小程序实现天气预报功能
Jul 18 Javascript
详解Webpack loader 之 file-loader
Nov 07 Javascript
详解javascript函数写法大全
Mar 25 Javascript
vantUI 获得piker选中值的自定义ID操作
Nov 04 Javascript
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
JS实现两表格里数据来回转移的方法
May 28 #Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 #Javascript
jQuery实现html表格动态添加新行的方法
May 28 #Javascript
jquery实现用户打分评分特效
May 28 #Javascript
用Node.js通过sitemap.xml批量抓取美女图片
May 28 #Javascript
javascript转换静态图片,增加粒子动画效果
May 28 #Javascript
jQuery实现限制textarea文本框输入字符数量的方法
May 28 #Javascript
You might like
实用函数9
2007/11/08 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
pandas.cut具体使用总结
2019/06/24 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
法学研究生自我鉴定范文
2013/12/04 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
Python基础之条件语句详解
2021/06/16 Python