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 相关文章推荐
Prototype 工具函数 学习
Jul 23 Javascript
JQuery toggle使用分析
Nov 16 Javascript
javascript模块化是什么及其优缺点介绍
Sep 02 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
Jul 05 Javascript
AngularJS中run方法的巧妙运用
Jan 04 Javascript
jQuery+pjax简单示例汇总
Apr 21 jQuery
js表单序列化判断空值的实例
Sep 22 Javascript
详解React开发必不可少的eslint配置
Feb 05 Javascript
vue结合element-ui使用示例
Jan 24 Javascript
防止Layui form表单重复提交的实现方法
Sep 10 Javascript
vue中提示$index is not defined错误的解决方式
Sep 02 Javascript
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
浅谈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新手上路(十)
2006/10/09 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
php while循环控制的简单实例
2016/05/30 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
高中毕业自我评价
2014/02/08 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
限期整改通知书
2015/04/22 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书