【发布时间】:2019-08-21 18:54:44
【问题描述】:
我正在尝试在不使用 jquery 插件的情况下创建一个快速的货币屏蔽功能。我所在的环境是使用requirejs,任何添加插件的尝试通常都会导致这个问题:
MISMATCHED ANONYMOUS DEFINE() MODULES
无论如何,下面是我的代码,我试图去掉小数点后的第 3 位数字,以便小数点后只有 2 位数字,但我终生无法弄清楚为什么我什么都没做正在让它消失。
currencyMask("#test");
function currencyMask(fieldID) {
$(fieldID).on('keypress click', function() {
if (this.value != '') {
if (this.value.length == 1) {
this.value = '0' + this.value
}
this.value = parseFloat(this.value.replace(/[^\d]/g, '').replace(/(\d\d?)$/, '.$1')).toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,').replace(/(\d{2})(\d$)/, '$1');
}
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input id='test'>
【问题讨论】:
-
所以,嗯.. 这个面具实际上应该做什么?
-
它应该将输入的数字屏蔽为货币。这样当您开始输入 100000 时,它会在您输入时自动将数字格式化为 1,000.00
-
改用keyup。
-
让整个事情变得奇怪的是,当您的代码对输入进行任何操作时,您正在最后一个位置输入,因为您完全替换了该值。
-
@KevinB,我对其进行了修改,使其从头开始而不是结束。
if (this.value != '' && this.value.length >= 3) { this.value = this.value.replace(/[^\d]/g, '').replace(/(\d{2}$)/, '.$1').replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); }是不是更容易理解?此外,您的“keyup”评论解决了这个问题,虽然我不完全确定为什么。
标签: javascript jquery currency masking