Javascript 带千位分隔符的html输入类型编号
我想在输入类型number中的keyup事件上添加千分隔符 但这项工作只需6个字符,若超过6个字符,输入值已重置 这是我的短代码Javascript 带千位分隔符的html输入类型编号,javascript,jquery,Javascript,Jquery,我想在输入类型number中的keyup事件上添加千分隔符 但这项工作只需6个字符,若超过6个字符,输入值已重置 这是我的短代码 <input type="number" id="tanpa-rupiah" step="any"> var dengan_rupiah = document.getElementById('dengan-rupiah'); dengan_rupiah.addEventListener('keyup', function(e) {
<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 : '');
}
这是我的小提琴好的,我已经把答案贴在下面了。我增加了20个数字的限制。你可以根据需要更换 您可以为此目的使用 以下是工作示例: //准备好了。 $function{ var-extra=0; var$input=$amount; $input.onkeyup,函数事件{ //当用户在文档中选择文本时,也将中止。 var selection=window.getSelection.toString; 如果选择!=={ 回来 } //按箭头键时,中止。 如果$.inarayEvent.keyCode,[38,40,37,39]!=-1{ 如果event.keyCode==38{ 额外=1000; }否则,如果event.keyCode==40{ 额外=-1000; }否则{ 回来 } } var$this=$this; //获取值。 var输入=$this.val; var input=input.replace/[\D\s\.\u\-]+/g; 输入=输入?解析输入,10:0; 输入+=额外; 额外=0; $this.valfunction{ 返回输入===0?:input.TOLOCALSTRINGEN-US; }; }; };
将输入类型更改为文本,然后更改其工作
<input type="text" id="tanpa-rupiah" step="any">
这可能适合你。On keydown如果不是数字键,则阻止默认操作。在keyup上,解析值并更新它。使用数据属性存储并获取原始值
var elem=document.getElementByIdnum;
元素addEventListenerkeydown,functionevent{
var key=event.which;
ifkey57&&key!=8 event.preventDefault;
};
元素addEventListenerkeyup,functionevent{
var value=这个.value.replace/,/g,;
this.dataset.currentValue=parseIntvalue;
var插入符号=value.length-1;
而Caret-3>-1
{
插入符号-=3;
value=value.split;
值。插入符号+1,0,,;
value=value.join;
}
这个值=值;
};
函数showValue
{
console.logdocument.getElementByIdnum.dataset.currentValue;
}
获得价值你的期望是什么?尽可能多这可能会有帮助:问题是当数字长度大于6时,它将变成4.444.444,输入类型中的点数字用于小数分隔,而不是千。因此,由于一个数字不能有两个十进制分隔符,因此它被丢弃。您应该实现Mamun和VicJordan建议的答案,但将其替换为点而不是逗号。这可能是一种更好的书写方式,但这里唯一的真正区别是type=text。这就是为什么它没有中断。@SamVK是的,总是尽可能多地使用本机功能以获得更好的性能。Number.toLocaleString对于此类需求非常方便。没错,主要的问题是需要文本的数字。维杰,你在这里说的有什么不同?这是@SamVK在评论中已经说过的。很抱歉,我没有注意到@SamVK评论