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 相关文章推荐
JS效率个人经验谈(8-15更新),加入range技巧
Jan 09 Javascript
Extjs Ajax 乱码问题解决方案
Apr 15 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 Javascript
详解vue之页面缓存问题(基于2.0)
Jan 10 Javascript
JS区分Object与Aarry的六种方法总结
Feb 27 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
Apr 02 jQuery
Bootstrap Multiselect 常用组件实现代码
Jul 09 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
详解在React项目中安装并使用Less(用法总结)
Mar 18 Javascript
JS原型对象操作实例分析
Jun 06 Javascript
Vue自动构建发布脚本的方法示例
Jul 24 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
Nov 05 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 Socket 编程
2010/04/09 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
python 正则式使用心得
2009/05/07 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python3.8中使用f-strings调试
2019/05/22 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
Python3运算符常见用法分析
2020/02/14 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
Python 日期与时间转换的方法
2020/08/01 Python
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
暑期实习鉴定
2013/12/16 职场文书
出生医学证明样本
2014/01/17 职场文书
领导班子四风表现材料
2014/08/23 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
民事二审代理词
2015/05/25 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL