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 prototype属性深入介绍
Nov 27 Javascript
浅析JavaScript中的CSS属性及命名规范
Nov 28 Javascript
浅析IE10兼容性问题(frameset的cols属性)
Jan 03 Javascript
javascript实现日期按月份加减
May 15 Javascript
javascript中的作用域和闭包详解
Jan 13 Javascript
jquery分页插件jquery.pagination.js使用方法解析
Apr 01 Javascript
AngularJS入门教程中SQL实例详解
Jul 27 Javascript
AngularJS的Filter的示例详解
Mar 07 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 Javascript
关于jquery中attr()和prop()方法的区别
May 28 jQuery
快速了解Node中的Stream流是什么
Feb 13 Javascript
jquery css实现流程进度条
Mar 26 jQuery
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
德生9700DX电路分析
2021/03/02 无线电
php,ajax实现分页
2008/03/27 PHP
PHP验证码函数代码(简单实用)
2013/09/29 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
prototype class详解
2006/09/07 Javascript
javascript字典探测用户名工具
2006/10/05 Javascript
asp 取文本框名称代码
2008/12/02 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
django批量导入xml数据
2016/10/16 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
企业总经理岗位职责
2014/02/13 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL