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焦点图片切换(数字标注/手动/自动播放/横向滚动)
Jan 24 Javascript
用js实现trim()的解决办法
Apr 16 Javascript
JavaScript中string对象
Jun 12 Javascript
JavaScript实现的伸展收缩型菜单代码
Oct 14 Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 Javascript
跟我学习javascript的call(),apply(),bind()与回调
Nov 16 Javascript
AngularJS 工作原理详解
Aug 18 Javascript
js仿京东轮播效果 选项卡套选项卡使用
Jan 12 Javascript
React 源码中的依赖注入方法
Nov 07 Javascript
echarts大屏字体自适应的方法步骤
Jul 12 Javascript
vue3+typeScript穿梭框的实现示例
Dec 29 Vue.js
JavaScript异步操作中串行和并行
Nov 20 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
PHP5 面向对象(学习记录)
2009/12/02 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
js获取Get值的方法
2016/09/29 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
分析python服务器拒绝服务攻击代码
2014/01/16 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Python实现统计单词出现的个数
2015/05/28 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
Python netmiko模块的使用
2020/02/14 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
Python实现EM算法实例代码
2020/10/04 Python
python从Oracle读取数据生成图表
2020/10/14 Python
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
在C#中如何实现多态
2014/07/02 面试题
自我鉴定范文300字
2013/10/01 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
社区服务活动总结
2014/05/07 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
财务总监岗位职责
2015/02/03 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android