Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带千位分隔符的html输入类型编号_Javascript_Jquery - Fatal编程技术网

Javascript 带千位分隔符的html输入类型编号

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) {

我想在输入类型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)
    {
        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评论