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 来操作字符串(一些字符串函数)
Feb 15 Javascript
js获取当前select 元素值的代码
Apr 19 Javascript
javascript动态创建表格及添加数据实例详解
May 13 Javascript
老生常谈js中0到底是 true 还是 false
Mar 08 Javascript
浅谈React深度编程之受控组件与非受控组件
Dec 26 Javascript
移动web开发之touch事件实例详解
Jan 17 Javascript
详解Koa中更方便简单发送响应的方式
Jul 20 Javascript
详解50行代码,Node爬虫练手项目
Apr 22 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
vue循环数组改变点击文字的颜色
Oct 14 Javascript
jquery自定义组件实例详解
Dec 31 jQuery
JS中循环遍历数组的四种方式总结
Jan 23 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
使用 MySQL Date/Time 类型
2008/03/26 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
PHP中时间加减函数strtotime用法分析
2017/04/26 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
Jquery replace 字符替换实现代码
2010/12/02 Javascript
使用js画图之饼图
2015/01/12 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
详解jQuery选择器
2016/12/21 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
利用python获取Ping结果示例代码
2017/07/06 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Python3中的json模块使用详解
2018/05/05 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
详解python中的线程与线程池
2019/05/10 Python
详解python tkinter 图片插入问题
2020/09/03 Python
Python和Bash结合在一起的方法
2020/11/13 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
《鞋匠的儿子》教学反思
2014/03/02 职场文书
五一手机促销方案
2014/03/08 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python