首页 >

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

web前端|js教程js格式化输入框内金额、银行卡号【javascript】
js格式化金额,js格式化银行卡号
web前端-js教程
我们在项目中经常遇到需要格式化的金额数和银行卡号,一般我们常见的有两种表现形式:输入框内格式化和输入框外格式化。这里我主要把我在项目中遇到的输入框内部格式化的,代码亮出来,框外的格式化相对简单一点。
一元云购网站源码,vscode写430,ubuntu压缩文件加密码,tomcat jvm日志,sqlite3 只读,jquery 世界地图 插件,css后台前端框架,爬虫放哪里不易坏,php 检测存在,seo 网页字体,晓风彩票网站源码,美食门户html网页模板下载,动易模板 标签,幸运28网站程序lzw
页面代码:
漂亮的房产 源码,vscode光标提示,优麒麟跟ubuntu区别大么,tomcat并发时间,sqlite安装64位,h5app转盘抽奖插件,flask框架怎么做前端,小黄人抖音爬虫,c 调用 php,易门SEO推广,微网站模板psd,网页视频怎么窗口播放视频怎么下载,外汇网站模板lzw
银行卡号格式化
微网站源码开源,vscode颜色组合,ubuntu设置共享文件夹,tomcat 监听,sqlite 条件语句,网页设计怎样才算侵权,数据库create语句,新网云邮企业邮箱 找不到服务器,jquery 文件批量上传插件,安硕前端框架,爬虫素材,序列化 php,seo推广的公司,springboot出错,dede 标签,好看的手机app网站模板,网页制作模板与素材,手机登陆模板 html代码,网站后台操作流程,html纯移动端页面框架,bootstrap 管理系统页面,socket通信程序lzw
//卡号每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")获取未格式化的金额    }
其实我觉得,输入框外的格式化更合理一些,大多数都是输入框外部格式化的,我写了个例子也拉出来吧。

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

页面代码:

.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; }
格式化代码:

/* 银行卡号实时验证放大显示 */$(".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();});

  • 暂无相关文章