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 相关文章推荐
jQuery插件 tabBox实现代码
Feb 09 Javascript
修复IE9&amp;safari 的sort方法
Oct 21 Javascript
用Vue.js实现监听属性的变化
Nov 17 Javascript
详解AngularJS中的表单验证(推荐)
Nov 17 Javascript
JavaScript中的call和apply的用途以及区别
Jan 11 Javascript
JavaScript创建对象的四种常用模式实例分析
Jan 11 Javascript
Vue 权限控制的两种方法(路由验证)
Aug 16 Javascript
使用kbone解决Vue项目同时支持小程序问题
Nov 08 Javascript
Vue数据双向绑定底层实现原理
Nov 22 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
Oct 02 Javascript
在vue中使用image-webpack-loader实例
Nov 12 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 函数学习简单小结
2010/07/08 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
JavaScript版代码高亮
2006/06/26 Javascript
IE与firefox之jquery用法区别
2008/10/03 Javascript
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
python中将字典转换成其json字符串
2014/07/16 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
Python更新所有已安装包的操作
2020/02/13 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
财务会计人员岗位职责
2013/11/30 职场文书
求职自荐信
2013/12/14 职场文书
八年级物理教学反思
2014/01/19 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
怒海潜将观后感
2015/06/11 职场文书
投诉书格式范本
2015/07/02 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js