js格式化输入框内金额、银行卡号


Posted in Javascript onFebruary 01, 2016

我们在项目中经常遇到需要格式化的金额数和银行卡号,一般我们常见的有两种表现形式:输入框内格式化和输入框外格式化。这里我主要把我在项目中遇到的输入框内部格式化的,代码亮出来,框外的格式化相对简单一点。

页面代码:

<div class="wrap">
  <input type="text" id="bankCard" placeholder="输入银行卡号">
</div>
 
<div class="wrap">
  <input type="text" id="moneyNum" placeholder="输入金额">
</div>

 银行卡号格式化

//卡号每4位一组格式化
    $("#bankCard").on("keyup", formatBC);
 
    function formatBC(e){
 
      $(this).attr("data-oral", $(this).val().replace(/\ +/g,""));
      //$("#bankCard").attr("data-oral")获取未格式化的卡号
 
      var self = $.trim(e.target.value);
      var temp = this.value.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 ');
      if(self.length > 22){
        this.value = self.substr(0, 22);
        return this.value;
      }
      if(temp != this.value){
        this.value = temp;
      }
    }

这里用“keyup”事件处理格式化,每4位数一组中间空格隔开。但是数据格式化以后又不利于计算,所以给当前元素添加一个属性“data-oral”,保存未处理的数字,这样计算或者要传递到后台可以获取“data-oral”的值。

金额格式化
金额格式化和银行卡号格式化类似,但又有点不同,因为金额每3位数一组用逗号隔开,一般最后有小数点且保留两位有效数字。这里我开始用到“keyup”和"change"事件,但是IE浏览器对于change事件存在兼容问题,可以改用focus和blur事件代替

类似给元素添加属性“data-oral”保存未格式化的数字。

/*
    * 金额每3位数一组逗号隔开格式化
    * 1.先把非数字的都替换掉
    * 2.由于IE浏览器对于change事件存在兼容问题,改用focus和blur事件代替。
    * */
    $("#moneyNum").on("keyup", formatMN);
 
    $("#moneyNum").on({
      focus: function(){
        $(this).attr("data-fmt",$(this).val()); //将当前值存入自定义属性
      },
      blur: function(){
        var oldVal=$(this).attr("data-fmt"); //获取原值
        var newVal=$(this).val(); //获取当前值
        if (oldVal!=newVal) {
          if(newVal == "" || isNaN(newVal)){
            this.value = "";
            return this.value;
          }
          var s = this.value;
          var temp;
 
          if(/.+(\..*\.|\-).*/.test(s)){
            return;
          }
          s = parseFloat((s + "").replace(/[^\d\.\-]/g, "")).toFixed(2) + "";
          var l = s.split(".")[0].split("").reverse(),
              r = s.split(".")[1];
          t = "";
          for(i = 0; i < l.length; i ++ ) {
            t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length && (l[i+1]!='-')? "," : "");
          }
          temp = t.split("").reverse().join("") + "." + r;
          this.value = temp;
          return this.value;
        }
      }
    });
 
    function formatMN(e){
      this.value = this.value.replace(/[^\d\.\-]/g,"");
      $(this).attr("data-oral", parseFloat(e.target.value.replace(/[^\d\.-]/g, "")));
      //$("#moneyNum").attr("data-oral")获取未格式化的金额
    }

其实我觉得,输入框外的格式化更合理一些,大多数都是输入框外部格式化的,我写了个例子也拉出来吧。

输入框外部格式化卡号
原理很简单,就是隐藏一个显示格式化的模块,当输入框获取焦点时显示,失去焦点时隐藏即可。

js格式化输入框内金额、银行卡号

页面代码:

<div class="inputCard-wrap">
  <input type="text" class="inputCard">
  <div class="panelCard"></div>
</div>
 
<style type="text/css">
  .inputCard-wrap{
    position: relative;
  }
  .inputCard-wrap .panelCard{
    display: none;
    position: absolute;
    top:-34px;
    left:0;
    z-index: 100;
    background-color:#fff9da;
    border:1px #ffce6e solid;
    padding:10px;
    height:40px;
    font-size: 1.7em;
    line-height:18px;
    color:#585858;
  }
</style>

格式化代码:

/* 银行卡号实时验证放大显示 */
$(".inputCard").keyup(function(e){
  var self = $.trim(e.target.value),
    parent = $(e.target).closest(".inputCard-wrap"),
    panel = $(".panelCard", parent),
    val = self.replace(/\D/g, '');
  if(self.length > 18){
    this.value = self.substr(0, 18);
    return this.value;
  }
  if(val == self){
    panel.show();
    val = self.replace(/(....)(?=.)/g, '$1 ');
    panel.html(val);
  }else{
    panel.hide();
    return self;
  }
});
$(".inputCard").unbind('focusin');
$(".inputCard").bind('focusin',function(e){
  var self = $.trim(e.target.value),
    parent = $(e.target).closest(".inputCard-wrap"),
    panel = $(".panelCard", parent),
    val = self.replace(/(....)(?=.)/g, '$1 ');
  if(val != '') {
    panel.show();
    panel.html(val);
  }
});
$(".inputCard").unbind('focusout');
$(".inputCard").bind('focusout',function(e){
  var parent = $(e.target).closest(".inputCard-wrap"),
    panel = $(".panelCard", parent);
  panel.hide();
});

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
基于JavaScript 下namespace 功能的简单分析
Jul 05 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
Oct 14 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
Jun 23 Javascript
使用ionic切换页面卡顿的解决方法
Dec 16 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
Feb 18 Javascript
浅谈Node.js爬虫之网页请求模块
Jan 11 Javascript
解决在vue项目中webpack打包后字体不生效的问题
Sep 01 Javascript
解决vue attr取不到属性值的问题
Sep 18 Javascript
angular学习之动态创建表单的方法
Dec 07 Javascript
extract-text-webpack-plugin用法详解
Feb 14 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
Jan 31 #Javascript
JavaScript中eval函数的问题
Jan 31 #Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
Jan 30 #Javascript
JavaScript中的this机制
Jan 30 #Javascript
实现高性能JavaScript之执行与加载
Jan 30 #Javascript
深入探秘jquery瀑布流的实现
Jan 30 #Javascript
深入分析Javascript事件代理
Jan 30 #Javascript
You might like
3.从实例开始
2006/10/09 PHP
一个php作的文本留言本的例子(二)
2006/10/09 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
jquery预览图片实现鼠标放上去显示实际大小
2014/01/16 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
js中作用域的实例解析
2017/03/16 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
党员自我评价分享
2013/12/13 职场文书
甜点店创业计划书
2014/01/27 职场文书
新闻学专业求职信
2014/07/28 职场文书
会计主管岗位职责
2015/04/02 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP