Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.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 使用jQuery/JS键入时,使用1000分隔符和2位小数设置货币输入格式?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 使用jQuery/JS键入时,使用1000分隔符和2位小数设置货币输入格式?

Javascript 使用jQuery/JS键入时,使用1000分隔符和2位小数设置货币输入格式?,javascript,jquery,html,Javascript,Jquery,Html,我有一个文本输入,当我输入一个允许2位小数和1000个分隔符的值时,我希望它格式化。它应该只允许数字。 我已经做了以下操作,但它不允许添加小数点。简单地说,它用于输入产品货币的价格 输入=1234560ABC.5665应仅允许数字 预期=1234560.56应将小数位数限制为2 我已经做了以下工作,但不知道如何在小数点后加上一个。固定1000个分离器 <input type="text" id="price" name="price&quo

我有一个文本输入,当我输入一个允许2位小数和1000个分隔符的值时,我希望它格式化。它应该只允许数字。 我已经做了以下操作,但它不允许添加小数点。简单地说,它用于输入产品货币的价格

输入=1234560ABC.5665应仅允许数字

预期=1234560.56应将小数位数限制为2

我已经做了以下工作,但不知道如何在小数点后加上一个。固定1000个分离器

<input type="text" id="price" name="price" />

$('#price').keyup(function (event) {
    $(this).val(function (index, value) {
        return '$' + value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    });
});

我的解决方案使用逐次替换

。替换/?!\\D/g,删除所有非数字字符,但不包括。
.replace/?我的解决方案使用连续的。replace

。替换/?!\\D/g,删除所有非数字字符,但不包括。
.replace/?您可以在keydown事件而不是keyup事件中限制键,并允许特定键生效,然后在keyup事件中格式化输入:

$testinput.onkeydown,函数E{ var keycode=event.which?event.which:event.keycode; 如果e.shiftKey==true | | e.ctrlKey==true,则返回false; 如果[8,110,39,37,46].indexOfkeycode>=0 | |//允许制表符、点、左右箭头、删除键 keycode==190&&this.value.indexOf'.===-1 | |//如果值中不存在允许点 keycode==110&&this.value.indexOf'.===-1 | |//如果值中不存在允许点 keycode>=48&&keycode=96&&keycode 1&&&//有小数 零件[1]。长度>=2&&//应限制此值 keycode>=48&&keycode=96&&keycode=2计算+=.+部分[1]。子字符串0,2; 该值=计算值; 如果this.value==NaN | | this.value==this.value=0; };
您可以在keydown事件而不是keyup事件中限制键,并允许特定键生效,然后在keyup事件中格式化输入:

$testinput.onkeydown,函数E{ var keycode=event.which?event.which:event.keycode; 如果e.shiftKey==true | | e.ctrlKey==true,则返回false; 如果[8,110,39,37,46].indexOfkeycode>=0 | |//允许制表符、点、左右箭头、删除键 keycode==190&&this.value.indexOf'.===-1 | |//如果值中不存在允许点 keycode==110&&this.value.indexOf'.===-1 | |//如果值中不存在允许点 keycode>=48&&keycode=96&&keycode 1&&&//有小数 零件[1]。长度>=2&&//应限制此值 keycode>=48&&keycode=96&&keycode=2计算+=.+部分[1]。子字符串0,2; 该值=计算值; 如果this.value==NaN | | this.value==this.value=0; };

@Techyte什么不起作用?您尝试了哪些输入失败?@TechyTee用另一个变体更新了答案。检查一下,还是不行。代码段给出了一个错误。我只输入了数字。什么也没发生。错误:{message:SyntaxError:invalid regexp group,filename:,lineno:16,colno:60}这对我来说很好,当我写字母时,我什么都没有,当我写数字时,我有$XX,XXX,XXX,如果我添加一个。我只有一个,后面只有两个,这不是OP想要的吗?@TechyTee在这里尝试同样的脚本fiddle@TechyTee什么不起作用?您尝试了哪些输入失败?@TechyTee用另一个变体更新了答案。检查一下,还是不行。代码段给出了一个错误。我只输入了数字。什么也没发生。错误:{message:SyntaxError:invalid regexp group,filename:,lineno:16,colno:60}这对我来说很好,当我写字母时,我什么都没有,当我写数字时,我有$XX,XXX,XXX,如果我添加一个。我只有一个数字,后面只有2个数字,这不是OP想要的?@TechyTee在Fiddle中尝试相同的脚本,它允许超过2位小数。当输入多个时。它会截断整个小数位,只返回整数。您输入的是2吗?它对此有保护作用。我没有想到小数点后2位,我会更新答案。更新我的答案。输入秒。仍在截断所有小数位。。请尝试565.56.56您正在测试哪个浏览器?它允许超过2位小数。当输入多个时。它会截断整个小数位,只返回整数。您输入的是2吗?它对此有保护作用。我没有想到小数点后2位,我会更新答案。更新我的答案。输入秒。仍在截断所有小数位。。请尝试565.56.56您正在测试哪个浏览器?在您的代码中,当我输入第二个小数位时,它会截断所有小数位。这就是你想要的吗?在你的代码中,当我输入第二个小数位时,它会截断所有小数位。这就是你想要的吗?别忘了接受你认为正确的答案。我们期待着你的消息。不要问就走,不要忘记接受你认为正确的答案。我们期待着你的消息。别光问就走。
$('#price').on('keyup click change paste input', function (event) {
    $(this).val(function (index, value) {
        if (value != "") {
            //return '$' + value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
            var decimalCount;
            value.match(/\./g) === null ? decimalCount = 0 : decimalCount = value.match(/\./g);

            if (decimalCount.length > 1) {
                value = value.slice(0, -1);
            }

            var components = value.toString().split(".");
            if (components.length === 1)
                components[0] = value;
            components[0] = components[0].replace(/\D/g, '').replace(/\B(?=(\d{3})+(?!\d))/g, ',');
            if (components.length === 2) {
                components[1] = components[1].replace(/\D/g, '').replace(/^\d{3}$/, '');
            }

            if (components.join('.') != '')
                return '$' + components.join('.');
            else
                return '';
        }
    });
});