JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
发布时间 - 2026-01-11 02:14:31 点击率:次应用场景

在开发“发送短信验证”功能时候,要解决一个问题,防止恶意或频繁发送短信验证码问题。一般原理是“当点击发送按钮时,发送ajax请求到服务器发送短信验证码,成功则把发送按钮设置为不可点击,并且调用定时器,按钮显示倒计时”。如果就这样不对倒计时存储做处理,那么当刷新页面,会出现倒计时失效,按钮可点击。提供以下解决方案:
- 利用cookie存储倒计时
- 利用HTML5的localStorage 存储倒计时
利用cookie存储倒计时
发送成功后把剩余倒计时存储到cookie,当页面刷新时,检查cookie 是否还存储着剩余倒计时?,如果有,发送按钮则保持倒计时状态,不可点击,否则发送按钮可点击。
HTML代码
<input type="button" id="btn" disabled="disabled" value="获取验证码">
jQuery代码
<!--引入jquery.cookie.js 插件-->
<script src="http:jquery.cookie.js" type="text/javascript" charset="utf-8"></script>
<!--逻辑功能代码 -->
<script>
$(function(){
if($.cookie("total")!=undefined&&$.cookie("total")!='NaN'&&$.cookie("total")!='null'){//cookie存在倒计时
timekeeping();
}else{//cookie 没有倒计时
$('#btn').attr("disabled", false);
}
function timekeeping(){
//把按钮设置为不可以点击
$('#btn').attr("disabled", true);
var interval=setInterval(function(){//每秒读取一次cookie
//从cookie 中读取剩余倒计时
total=$.cookie("total");
//在发送按钮显示剩余倒计时
$('#btn').val('请等待'+total+'秒');
//把剩余总倒计时减掉1
total--;
if(total==0){//剩余倒计时为零,则显示 重新发送,可点击
//清除定时器
clearInterval(interval);
//删除cookie
total=$.cookie("total",total, { expires: -1 });
//显示重新发送
$('#btn').val('重新发送');
//把发送按钮设置为可点击
$('#btn').attr("disabled", false);
}else{//剩余倒计时不为零
//重新写入总倒计时
$.cookie("total",total);
}
},1000);
}
//绑定发送按钮
$('#btn').click(function(event) {
/* Act on the event */
// alert($("#btn").val());
//校验手机号码
var phone=$('#phone').val();
var pre=/^[1][358][0-9]{9}$/;
if(phone==''){
layer.open({
content: '手机号码不能为空',
time: 2
});
return this;
}else{
var pre=/^[1][358][0-9]{9}$/;
if(!pre.test(phone)){
layer.open({
content: '手机号码格式有误!',
time: 2
});
return this;
}
}
$.ajax({
url: '',//服务器发送短信
type: 'GET',
dataType: 'json',
data: {phone: phone},
})
.done(function(re) {
var str="发送短信验证码成功,请注意查看您的手机";
// console.log(re);
if(re){
$.cookie("total",60);
timekeeping();
}else{
switch (re[0]) {
case '160038':
str="短信验证码发送过频繁";
break;
case '160034':
str="号码黑名单";
break;
case '160000':
str="系统错误";
break;
case '000000':
str="发送成功";
break;
case '112300':
str="接收短信的手机号码为空";
break;
case '160040':
str="验证码超出发送上限";
break;
case '160042':
str="号码格式有误";
break;
default:
str="发送验证码失败";
break;
}
}
layer.open({
content: str,
time: 2
});
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
});
})
</script>
以上所述是小编给大家介绍的JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# js发送短信验证码倒计时
# JS+HTML5实现获取手机验证码倒计时按钮
# JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
# Angular.js实现获取验证码倒计时60秒按钮的简单方法
# 点击按钮出现60秒倒计时的简单js代码(推荐)
# js代码实现点击按钮出现60秒倒计时
# JS自动倒计时30秒后按钮才可用(两种场景)
# JS按钮倒计时并跳转到新地址的实现代码
# 倒计时
# 验证码
# 发送短信
# 设置为
# 小编
# 为零
# 为空
# 您的
# 在此
# 不可以
# 给大家
# 请注意
# 一个问题
# 所述
# 绑定
# 给我留言
# 感谢大家
# 则把
# 疑问请
# 有任何
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解MySQL数据库的安装与密码配置
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
长沙企业网站制作哪家好,长沙水业集团官方网站?
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
javascript日期怎么处理_如何格式化输出
如何快速生成橙子建站落地页链接?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Laravel如何配置和使用缓存?(Redis代码示例)
EditPlus中的正则表达式 实战(1)
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel如何使用Sanctum进行API认证?(SPA实战)
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
EditPlus中的正则表达式实战(6)
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel怎么调用外部API_Laravel Http Client客户端使用
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
微信小程序 HTTPS报错整理常见问题及解决方案
香港服务器网站卡顿?如何解决网络延迟与负载问题?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
如何在局域网内绑定自建网站域名?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Python文本处理实践_日志清洗解析【指导】
黑客如何通过漏洞一步步攻陷网站服务器?
如何用PHP快速搭建高效网站?分步指南
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何在建站之星绑定自定义域名?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
利用python获取某年中每个月的第一天和最后一天
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
详解Android图表 MPAndroidChart折线图
浅谈redis在项目中的应用
JavaScript实现Fly Bird小游戏
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
Laravel怎么为数据库表字段添加索引以优化查询

