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 相关文章推荐
JavaScript 面向对象的之私有成员和公开成员
May 04 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
May 08 Javascript
JavaScript prototype 使用介绍
Aug 29 Javascript
js this函数调用无需再次抓获id,name或标签名
Mar 03 Javascript
javascript实现类似超链接的效果
Dec 26 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
Jan 09 Javascript
jQuery中offsetParent()方法用法实例
Jan 19 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
Feb 16 Javascript
JavaScript实现的选择排序算法实例分析
Apr 14 Javascript
vue中eventbus被多次触发以及踩过的坑
Dec 02 Javascript
在Vue组件中获取全局的点击事件方法
Sep 06 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
Nov 06 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变量修饰符static的使用
2013/06/28 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
XML的代替者----JSON
2007/07/21 Javascript
toString()一个会自动调用的方法
2010/02/08 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
从零学python系列之从文件读取和保存数据
2014/05/23 Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
新闻网站实习自我鉴定
2013/09/25 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
校园安全广播稿范文
2014/09/25 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
小学毕业感言200字
2015/07/30 职场文书