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 相关文章推荐
ExtJs事件机制基本代码模型和流程解析
Oct 24 Javascript
js播放wav文件(源码)
Apr 22 Javascript
JS过滤url参数特殊字符的实现方法
Dec 24 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
Mar 27 Javascript
JS字符串的切分用法实例
Feb 22 Javascript
JS作为值的函数用法示例
Jun 20 Javascript
Angular2生命周期钩子函数的详细介绍
Jul 10 Javascript
解决vue打包css文件中背景图片的路径问题
Sep 03 Javascript
微信小程序封装自定义弹窗的实现代码
May 08 Javascript
vuex actions异步修改状态的实例详解
Nov 06 Javascript
JavaScript实现放大镜效果代码示例
Apr 29 Javascript
elementui实现预览图片组件二次封装
Dec 29 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
摩卡咖啡
2021/03/03 咖啡文化
PHP数组实例总结与说明
2011/08/23 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
FireFox JavaScript全局Event对象
2009/06/14 Javascript
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
python打开windows应用程序的实例
2019/06/28 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
django 微信网页授权登陆的实现
2019/07/30 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
介绍一下游标
2012/01/10 面试题
.net软件工程师面试题
2015/03/31 面试题
高中生毕业自我鉴定
2013/10/10 职场文书
医师定期考核实施方案
2014/05/07 职场文书
市场营销专业自荐书
2014/06/10 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
学习十八大演讲稿
2014/09/15 职场文书
2014年维稳工作总结
2014/11/18 职场文书
2015年组织部工作总结
2015/04/03 职场文书
采购部年度工作总结
2015/08/13 职场文书
八年级作文之友谊
2019/12/02 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python