在这里讲一讲这个案例的实现思路吧(个人见解)。。核心思想:为防止页面刷新时倒计时失效的解决方案是:当每次刷新一次页面时都执行一个函数 即下面讲到的 setStyle() 函数。这个函数会根据当前的 cookie 值判断 是否处于倒计时阶段 ,因为 cookie 值不会随着 网页的刷新而改变。

最后面已附上全部代码可直接复制下来借鉴一下。

1、本案例用到了 jQuery,第一步:页面引入 jQuery。

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>

2、第二步:HTML 部分,为演示方便 只需一个按钮即可。

<button id="btn">获取</button>

3、第三步:js 代码部分。该部分 是采用操作 cookie 来实现 刷新页面 倒计时不失效。

①点击按钮设置 cookie 、显示倒计时时间以及禁用按钮

$('#btn').click(function(){
$('#btn').text('倒计时30s');  // 倒计时
$('#btn').prop('disabled',true);  //禁用按钮
$(document)[0].cookie = 'ckey='+30;  // 设置 cokie
});

②获取当前 cookie 值

function getCookie(){
// 获取全部的 cookie
var cookie = $(document)[0].cookie;
// 获取 cookie 项 (数组)
var citem = cookie.split(';');
// 过滤数组 获得 键为 ckey 的项
var ckey = citem.filter(function(item){
return item.split('=')[0].trim()=='ckey';
});
// 获得 时间 cval
cval = ckey[0].split('=')[1];
return cval;
}

③防止页面刷新时倒计时失效。解决方案是 每刷新一次页面都要获取当前的 cookie 值 ,如果值不为零的话一直是禁用状态

function setStyle(){
var cval = getCookie();
if(cval>1){
$('#btn').text('倒计时'+cval+'s');
$('#btn').prop('disabled',true);
console.log('hahah')
}else{
$('#btn').text('获取验证码');
$('#btn').prop('disabled',false);
}
}
setStyle();

④定时器实现倒计时

setInterval(function(){
setCookie();
console.log(1);
},1000) function setCookie(){
var cval = getCookie();
if(cval>1){
$(document)[0].cookie = 'ckey='+(cval-1);
$('#btn').text('倒计时'+(cval-1)+'s');
$('#btn').prop('disabled',true);
}else if(cval==1){
$('#btn').text('获取验证码');
$('#btn').prop('disabled',false);
$(document)[0].cookie = 'ckey='+0;
}
}

4、完整代码 直接复制 即可使用

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<input type="text">
<button id="btn">获取</button>
<script>
$('#btn').click(function(){
$('#btn').text('倒计时30s');
$('#btn').prop('disabled',true);
// 设置 cookie 值
$(document)[0].cookie = 'ckey='+30;
console.log('cookie 设置完毕'); });
function setStyle(){
var cval = getCookie();
if(cval>1){
$('#btn').text('倒计时'+cval+'s');
$('#btn').prop('disabled',true);
console.log('hahah')
}else{
$('#btn').text('获取验证码');
$('#btn').prop('disabled',false);
}
}
setStyle(); id = setInterval(function(){
setCookie();
console.log(1);
},1000) function setCookie(){
var cval = getCookie();
if(cval>1){
$(document)[0].cookie = 'ckey='+(cval-1);
$('#btn').text('倒计时'+(cval-1)+'s');
$('#btn').prop('disabled',true);
}else if(cval==1){
$('#btn').text('获取验证码');
$('#btn').prop('disabled',false);
$(document)[0].cookie = 'ckey='+0;
// clearInterval(id);
}
}
function getCookie(){
// 获取全部的 cookie
var cookie = $(document)[0].cookie;
// 获取 cookie 项 (数组)
var citem = cookie.split(';');
// 过滤数组 获得 键为 ckey 的项
var ckey = citem.filter(function(item){
return item.split('=')[0].trim()=='ckey';
});
// 获得 时间 cval
cval = ckey[0].split('=')[1];
return cval;
}
</script>
</body>
</html>

jQuery实现发送验证码30s倒计时,且刷新页面时有效的更多相关文章

  1. JS倒计时(刷新页面不影响)的实现思路

    最近在做一个项目,用到了点击按钮实现倒计时,这个用js来实现很简单.但是遇到了一个问题 页面刷新后js重新加载导致 倒计时重新开始,或者直接初始化了 后来通过 cookie 保存来实现了js倒计时,关 ...

  2. 刷新页面时 select值保持不变

    刷新页面时,要使下拉菜单(select).raido保持不变,用ajax是无法实现的.我想只能通过cookies才能实现.刷新前先把select或radio的值保存在cookies中,刷新后再填回去. ...

  3. jQuery实现发送验证码倒计时60秒

    前端HMTL: <div class="form_box"> <div class="line mb40"> <div class ...

  4. jQuery手机发送验证码倒计时代码

    <!DOCTYPE> <html> <head> <meta charset="UTF-8"> <script type=&q ...

  5. 发送验证码60s倒计时实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 【积累】发送验证码按钮倒计时js

    注册的时候要发送验证码,就上网研究了一下,写了一个简单点的... jsp页面: <input type="button" id="testbtn" val ...

  7. 解决让刷新页面时不提示 "重试或取消”对话框

    如果刷新一个已经提交过的页面时,系统总是会提示一个 "重试或取消”的对话框.,如果是一个普通的页面,好象也无所谓,有就有,大不了多点一下.但是当我们是在子窗体中刷新父窗体时,就显得有点多余了 ...

  8. 解决vuex保存的数据刷新页面时清空

    参考文章: vuex中store保存的数据,刷新页面会清空 主要解决代码: 1.更改store文件下index文件state的定义 const store = new Vuex.Store({ sta ...

  9. js发送验证码(倒计时)

    需求:在用户点击获取验证码后60s内不能再次获取 代码 //倒计时60秒 var countdown=60; //显示获取验证码倒计时的文本标签 var _generate_code =$(" ...

随机推荐

  1. laravel5.6 使用迁移创建表

    laravel 使用迁移创建表 创建迁移文件 --table 和 --create 选项可以用于指定表名以及该迁移是否要创建一个新的数据表.这些选项只需要简单放在上述迁移命令后面并指定表名: php ...

  2. arm汇编指令--str ldr

    STR :把寄存器中的字保存到存储器(寄存器到存储器) 示例: STR R0,[R1],#8             :将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1.STR ...

  3. java 第一章

    1.java四要素  public static void main 2.java 的历史 and soso 3.知道java的格式和要求 4.知道如何配置环境变量 5.java的编写:  a.大括号 ...

  4. decode函数的几种用法

    1:使用decode判断字符串是否一样 DECODE(value,if1,then1,if2,then2,if3,then3,...,else) 含义为 IF 条件=值1 THEN RETURN(va ...

  5. python-crud

    Python Fast CRUD https://github.com/aleimu/python-crud 目的 本项目采用了一系列Python中比较流行的组件,可以以本项目为基础快速搭建Restf ...

  6. ES6--变量

    声明变量 首先我们来回顾一下 es6 之前声明变量的方法:通常情况下,在 JavaScript 中,我们只有一种声明变量的关键字--var,我们使用 var 声明变量,使用 = 给变量赋值.在es6中 ...

  7. 【python-django后端开发】Redis缓存配置使用详细教程!!!

    官方查阅资料:https://django-redis-chs.readthedocs.io/zh_CN/latest/ 1. 安装django-redis扩展包 1.安装django-redis扩展 ...

  8. 标签助手(TagHelper)

    1.什么是标签助手 Tag Helper 标签助手是服务端代码能够参与在 Razor 文件中创建和呈现HTML元素.例如,内置的 ImageTagHelper 可以将版本号追加到图像名称.无论何时更改 ...

  9. 创建软RAID5

    一  创建4块硬盘组软  RAID5  新增四块20G的新硬盘,将四块硬盘分别分区,全部大小都分为一个区,并改  id  为 “ fd ”      1创建阵列mdadm -Cv /dev/md5 - ...

  10. 疯子的算法总结(三) STL Ⅱ迭代器(iterator) + 容器

    一.迭代器(Iterator) 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历. 定义:迭代器是一种检查容器内元素 ...