javascript - 带有千位分隔符的html输入类型编号
问题描述
我想在输入类型编号的 keyup 事件上添加千位分隔符,但这仅适用于 6 个字符,如果超过 6 个字符,则输入值已重置
这是我的短代码
<input type="number" id="tanpa-rupiah" step="any">
var dengan_rupiah = document.getElementById('dengan-rupiah');
dengan_rupiah.addEventListener('keyup', function(e)
{
dengan_rupiah.value = formatRupiah(this.value, 'Rp. ');
});
function formatRupiah(bilangan, prefix)
{
var number_string = bilangan.replace(/[^,\d]/g, '').toString(),
split = number_string.split(','),
sisa = split[0].length % 3,
rupiah = split[0].substr(0, sisa),
ribuan = split[0].substr(sisa).match(/\d{1,3}/gi);
if (ribuan) {
separator = sisa ? '.' : '';
rupiah += separator + ribuan.join('.');
}
rupiah = split[1] != undefined ? rupiah + ',' + split[1] : rupiah;
return prefix == undefined ? rupiah : (rupiah ? 'Rp. ' + rupiah : '');
}
解决方案
这可能适合你。如果keydown
它不是数字键,则阻止默认操作。On keyup
,解析值并更新它。使用data-
属性存储和获取原始值。
var elem = document.getElementById("num");
elem.addEventListener("keydown",function(event){
var key = event.which;
if((key<48 || key>57) && key != 8) event.preventDefault();
});
elem.addEventListener("keyup",function(event){
var value = this.value.replace(/,/g,"");
this.dataset.currentValue=parseInt(value);
var caret = value.length-1;
while((caret-3)>-1)
{
caret -= 3;
value = value.split('');
value.splice(caret+1,0,",");
value = value.join('');
}
this.value = value;
});
function showValue()
{
console.log(document.getElementById("num").dataset.currentValue);
}
<input type="text" id="num" maxlength="30">
<button onclick="showValue()">Get Value</button>
推荐阅读
- mybatis - 未找到参数“updateBy”。可用参数为 [0, createBy, param1, param2]
- python - 如何通过 pip 在特定 python 安装的站点包中安装 python 包?
- assembly - 取消设置 asm 中的最低设置位
- python - LSTM 模型;无效的 input_h 形状:[1,10,128] [1,4,128]
- python - 如何从 numpy 数组创建这个矩阵?
- cesium - 在 2D 地图中如何获取鼠标位置的地形高度?
- asp.net - 为什么我的单选按钮 asp 代码得到“无效的回发或回调参数”?
- javascript - 我正在制作一个旁观反应组件,当将鼠标悬停在上面时,它看起来会放大。您如何安排国有资产?
- asp.net - 如何在 asp.net 中使用 rest 客户端传递 json 补丁数据?
- c - 如何找出用户输入在 C 中的时间长度?