jQuery 手机验证码计时功能

本贴最后更新于 3045 天前,其中的信息可能已经时过境迁

现在网站或者 app 注册都流行手机验证码,但是不知道大家有没有考虑过一个问题,如果一个用户可以连续获取验证短信,那我们是不是可以把仇人的手机号码填进去,然后一直获取验证短信达到骚扰他的目的? 事实上经过我的验证很多短信轰炸的软件都是这么做的,这里我们前端并不能防范,但是前端可以防止用户恶意操作,这么做的目的是因为发短信是要钱的。。。

闲话就说到这里了,现在开始讲解到底该怎么做

先做一个输入框 旁边放一个更换手机号码的按钮 像这样

然后再做一个模态框

填写完手机号码之后,点击获取验证码按钮

当然前端也需要对用户填写的手机号码进行判断是否正确,往这个方法里面传一个号码,正确的话会返回 true 反之亦然

/*验证手机号码*/ function vaildphone(num) { var mobile = /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})$/ if(mobile.test(num) && num.length == 11) { return true }else { return false } }

这涉及到正则表达式,不再详细讲解自行度娘

当用户的手机号码正确了,我们把号码 post 到后台,后台调用 api 即可发送短信到大家的手机上(后台我们也不讲涉及到太多)
这时候我们的获取验证码按钮就开始 CD 了

像这样

好的,开始讲重点

/*倒计时*/ function cutDown(time) { setTimeout(function() { //getPhoneCode就是获取验证码的按钮 $("#getPhoneCode").html(time + "秒后重试") time-- cutDown(time) }, 1000) }

使用 setTimtout 方法用来做延迟 单位是毫秒 所以给了个 1000,每次过一秒种就会对传进来的参数进行减动作,这应该很好理解
减完之后 这里用到了递归的方法 继续调用自身 知道 time 这个变量大于 0 为止,这段代码就实现了倒计时的功能。

这样就就可以了吗?答案当然是不行! 如果用户一刷新那么按钮就会变回原来的样子这肯定是不行的
所以我想到了用 cookie,cookie 是储存在用户手机浏览器里的,当然它可以改但一般的用户肯定是不会的
我们不考虑意外因素只用实现业务逻辑就行了,其他的交给后端去做

$.post(url + "changePhone", { 'phone': $("#phoneNumber").val() }, function(data) { var status = $.parseJSON(data).status if(status == 0){ al6rt("获取验证码频繁请稍后再试") }else if(status == 1) { //生成时间戳并加上3分钟 即是 180秒 * 1000 $.cookie('time', (new Date()).getTime() + 180000) $("#getPhoneCode").unbind('click') cutDown(180) $("#phoneCode").css('display','block') }else if(status == 2) { al6rt("该号码已经注册") }

al6rt 是我写的冒泡提示框等同于 alert

/*倒计时*/ function cutDown(time) { if(time > 0){ setTimeout(function() { //getPhoneCode就是获取验证码的按钮 $("#getPhoneCode").html(time + "秒后重试") time-- cutDown(time) }, 1000) }else { //超过3分钟后给按钮绑定点击时间 $("#getPhoneCode").html("获取验证码") $("#getPhoneCode").bind('click', getCode) } }

这样一来超过 3 分钟后按钮就变回原来的获取验证码,并绑定获取验证码的方法

/*初始化验证码*/ if((new Date()).getTime() > $.cookie('time') || $.cookie('time') == undefined){ $("#getPhoneCode").bind('click',getCode) }else { var s = ($.cookie('time') - (new Date()).getTime()) /1000 cutDown(parseInt(s)) }
  1. 每次打开页面都会初始化一下按钮如果 cookie 中储存的时间戳大于当前的那么它会继续倒计时
  2. 如果小于当前的时间戳说明它已经超过 3 分钟了或者它为空就说明用户还没获取过验证码,那么它为原来的获取验证码按钮

具体的业务逻辑可以到我们服务号来观看

The End

  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 730 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1278 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 759 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖 • 2 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 485 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 901 回帖
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 609 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 399 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 648 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 393 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 655 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 5 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 2 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 702 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    366 引用 • 1842 回帖 • 1 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    77 引用 • 389 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 408 回帖 • 484 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 76 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 8 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    7 引用 • 27 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 31 关注
  • danl
    164 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 638 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖