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 相关文章推荐
js可突破windows弹退效果代码
Aug 09 Javascript
Firefox中beforeunload事件的实现缺陷浅析
May 03 Javascript
jQuery学习之prop和attr的区别示例介绍
Nov 15 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
Jun 20 Javascript
js实现图片无缝滚动特效
Mar 19 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
Oct 14 Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 Javascript
Bootstrap笔记之缩略图、警告框实例详解
Mar 09 Javascript
JavaScript数组push方法使用注意事项
Oct 30 Javascript
详解vue-cli3多环境打包配置
Mar 28 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
May 24 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
Apr 09 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
thinkphp四种url访问方式详解
2014/11/28 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
php报错502badgateway解决方法
2019/10/11 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
SWFObject Flash js调用类
2008/07/08 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
Python 条件判断的缩写方法
2008/09/06 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
python实现按关键字筛选日志文件
2019/12/24 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
文员岗位职责
2013/11/09 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
中专自我鉴定
2014/02/05 职场文书
村级换届选举方案
2014/05/10 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
nginx rewrite功能使用场景分析
2022/05/30 Servers