WEB开发之注册页面验证码倒计时代码的实现


Posted in Javascript onDecember 15, 2016

近期因为开发一个新的H5+backbone 项目,验证输入手机号 验证码倒计时功能。

WEB开发之注册页面验证码倒计时代码的实现WEB开发之注册页面验证码倒计时代码的实现

#如上图所示 要实现验证码的倒计时的效果

  • 首先做页面的布局
  • 理清楚页面效果需要实现的逻辑思路
  • 对手机号及验证码和密码做正则的规则校验

前端样式布局代码

<ul>
 <li class="phone bgImg">
   <input type="text" id="phone" maxlength="11" placeholder="手机号"/>
  </li>
  <li class="vCodeImg bgImg" id="sendVCode">
   <input type="text" id="smscode" maxlength="10" placeholder="验证码"/>
   <a class="get" href="#" id="sendCode">获取</a>
   <label class="noVcode" id="notSms" hidden><i>10s</i><a href="#">|收不到验证码</a></label>
  </li>
  <li class="password bgImg">
   <input type="text" id="password" maxlength="10" placeholder="6-10位数字&字母组合登录密码"/>
   <a href="#" class="invisible bgImg"></a>
  </li>
 </ul>

后端逻辑实现

首先先做下说明,因为自己公司的框架部分,对整个项目做了三层框架的架构划分,可同时支持iOS,Android,Web端.

首先去调取我要注册的api接口部分

 1:调取register 注册接口

doPost(proxy.apis.register, {}, {
  success:function (data) {
   $$('#Register').off();
   var btn = $$("#Register");
  }
 });

 2:这个是调取的api接口部分

register:'/auth/register',   /*注册*/
 login:'/auth/login',    /*登录*/
 send_code:"/auth/getValidCode" /*发送验证码*/

 3:方法的定义放在最外面

that.eventsHandler();
 that.registerSubmit();
 that.sendMessage();
registerSubmit : function(){
   $('#Register').off('click').on('click',function(){
    // debugger;
    var phoneVal = $$.trim($$('#phone').val());
    var smsCodeVal = $$.trim($$('#smscode').val());
    var passwordVal = $$('#password').prop('value').trim();
    if (phoneVal == '') {
     popup('', '', '请输入手机号');
     return false;
    }
    var verifyphone = __reg__.phone;
    if(!verifyphone.test(phoneVal)){
     popup('','','手机号码格式错误');
     return false;
    }
    if (smsCodeVal == '') {
     popup('','','请发送短信验证码');
     return;
    }
    if (passwordVal == '') {
     popup('','','请输入密码');
     return;
    }
    $$("#Register").off('click');
   });
  },
  sendMessage : function () {
   var intervalInt;
   var sendCode = $$('#sendCode');
   var notSms = $$('#notSms');
   function sendFn() {
    sendCode.val(10).hide().off('click');
    notSms.show().off('click').on('click',notSms_click).css('color','#40cbff');
    intervalInt = setInterval(timeFn,1000);
    /*doPost(proxy.apis.send_code, {"phone":sendData.phone,"type":"borrowSms"}, {
     success:function (data) {
     if (data.status != '1') {
     popup('', '','发送短信出错');
     }
     },
     error:function(data){
     popup('', '', data.msg);
     }
     });*/
   }
   function timeFn() {
    var secondVal = sendCode.val();
    sendCode.val(secondVal - 1);
    notSms.find('i').html(secondVal-1 + 's');
    if (sendCode.val() == 0 ) {
     // debugger
     notSms.hide();
     clearInterval(intervalInt);
     sendCode.show().on('click',sendFn);
    }
   }
   function notSms_click() {
    notSms.css('color','gray');
    dialog('获取语音验证码', '验证码将以电话形式通知到你,请注意接听??', 'OK', function () {
     $$('#notSms').off('click');
     doPost(proxy.apis.send_code, {"phone": phone, "type": "registerVoice"}, {
      success: function (data) {
       if (data.status != '1') {
        popup('', '', data.msg);
       }
      },
      error: errorFn
     });
    });
   }
   sendCode.off('click').on('click',sendFn);
  }

这里列出一个和本文无关的但是有用的正则校验:(name)姓名中带点的·名字的校验,如  买买提·古力娜扎·阿凡提

var __reg__ = {
 'name':/^[\u4E00-\u9FA5]+(·[\u4E00-\u9FA5]+)*$/,
 'phone':/^1[34578]\d{9}$/
};

这里说一个timeFn() 方法,其实当我点开申请按钮的时候,你看到的是秒数在倒计时,其实这里做了2件事,第一是我给了一个数从60s开始,这个数值是写死的,endCode.val(10).hide().off('click');,然后通过sendCode去取当前的秒数值,再依次做减法运算,直到秒数减到为0.在显示 “申请”按钮 sendCode.show().on('click',sendFn);

var secondVal = sendCode.val();
 sendCode.val(secondVal - 1);
 notSms.find('i').html(secondVal-1 + 's');

这样就实现了一个验证码倒计时的效果,这里提个醒:写每个方法的时候,要看清是在内部写还是在外部写,是不是在方法的作用范围内,不然click事件的触发效果是不会实现出来的.

希望本文所述对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
extjs中grid中嵌入动态combobox的应用
Jan 01 Javascript
如何在一个页面显示多个百度地图
Apr 07 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
Jan 17 Javascript
js 显示base64编码的二进制流网页图片
Apr 04 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
jquery彩色投票进度条简单实例演示
Jul 23 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
Aug 10 Javascript
vue+iview+less 实现换肤功能
Aug 17 Javascript
ztree加载完成后显示勾选节点的实现代码
Oct 22 Javascript
js实现计算器功能
Aug 10 Javascript
vue路由结构可设一层方便动态添加路由操作
Aug 31 Javascript
如何使JavaScript休眠或等待
Apr 27 Javascript
浅谈javascript alert和confirm的美化
Dec 15 #Javascript
JavaScript模板引擎Template.js使用详解
Dec 15 #Javascript
原生JS实现图片轮播切换效果
Dec 15 #Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Dec 15 #Javascript
利用vue写todolist单页应用
Dec 15 #Javascript
jquery插件bootstrapValidator表单验证详解
Dec 15 #Javascript
jQuery中的100个技巧汇总
Dec 15 #Javascript
You might like
php公用函数列表[正则]
2007/02/22 PHP
完美解决PHP中文乱码
2009/11/26 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
python检查指定文件是否存在的方法
2015/07/06 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
智乐游戏测试笔试题
2014/05/21 面试题
《尊严》教学反思
2014/02/11 职场文书
高中同学会活动方案
2014/08/14 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
2015年营业员工作总结
2015/04/23 职场文书
小学运动会加油稿
2015/07/22 职场文书
2016春季运动会前导词
2015/11/25 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
MySQL慢查询的坑
2021/04/28 MySQL
微信小程序实现录音Record功能
2021/05/09 Javascript