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 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
读jQuery之二(两种扩展)
Jun 11 Javascript
防止文件缓存的js代码
Jan 10 Javascript
js截取小数点后几位的写法
Nov 14 Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 Javascript
js实现的标题栏新消息闪烁提示效果
Jun 06 Javascript
JavaScript输出当前时间Unix时间戳的方法
Apr 06 Javascript
Javascript设计模式之装饰者模式详解篇
Jan 17 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
Aug 14 Javascript
深入理解Vue 单向数据流的原理
Nov 09 Javascript
Vue 事件处理操作实例详解
Mar 05 Javascript
JavaScript利用键盘码控制div移动
Mar 19 Javascript
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
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
2016/06/21 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
Python类的基础入门知识
2008/11/24 Python
python获取本地计算机名字的方法
2015/04/29 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python生成二维码的实例详解
2017/10/29 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
苹果台湾官网:Apple台湾
2019/01/05 全球购物
财产公证书样本
2014/04/04 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python