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 相关文章推荐
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 Javascript
javascript 数据类型转换(parseInt,parseFloat)
Jul 20 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
Jun 25 Javascript
导航跟随滚动条置顶移动示例代码
Sep 11 Javascript
javascript实现行拖动的方法
May 27 Javascript
Node.js中npm常用命令大全
Jun 09 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
Aug 30 Javascript
Angular.js中$apply()和$digest()的深入理解
Oct 13 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
jQuery+koa2实现简单的Ajax请求的示例
Mar 06 jQuery
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
JS+php后台实现文件上传功能详解
Mar 02 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
discuz的php防止sql注入函数
2011/01/17 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
vue 实现购物车总价计算
2019/11/06 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
药品质量检测应届生求职信
2013/11/14 职场文书
外贸英语专业求职信范文
2013/12/25 职场文书
洗车工岗位职责
2014/03/15 职场文书
教师节感谢信
2015/01/22 职场文书
企业介绍信范文
2015/01/30 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏