Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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中货币屏蔽期间的额外数字_Javascript_Jquery_Currency_Masking - Fatal编程技术网

Javascript中货币屏蔽期间的额外数字

Javascript中货币屏蔽期间的额外数字,javascript,jquery,currency,masking,Javascript,Jquery,Currency,Masking,我正在尝试在不使用jquery插件的情况下为货币屏蔽创建一个快速函数。我所处的环境正在使用requirejs,任何添加插件的尝试都会导致以下问题: 不管怎样,下面是我的代码,我试图去掉小数点后的第三个数字,这样小数点后就只有两个数字了,但我一辈子都不明白为什么我所做的一切都没有让它消失 currencyMask(“测试”); 函数currencyMask(字段ID){ $(fieldID).on('keypress click',function(){ if(this.value!=''){

我正在尝试在不使用jquery插件的情况下为货币屏蔽创建一个快速函数。我所处的环境正在使用requirejs,任何添加插件的尝试都会导致以下问题:

不管怎样,下面是我的代码,我试图去掉小数点后的第三个数字,这样小数点后就只有两个数字了,但我一辈子都不明白为什么我所做的一切都没有让它消失

currencyMask(“测试”);
函数currencyMask(字段ID){
$(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');
}
});
}

经过一些讨论、测试和研究。我稍微更改了代码,并解决了about
keyup
vs
keypress
中提到的问题

经过一些研究,当“按键按下”时,
按键会触发,而
keyup
在“钥匙释放”时触发

因此,我选择了
keyup

此外,他说:


让整个事情变得奇怪的是,当你的代码对输入做任何事情的时候,你正在最后一个位置键入,因为你正在完全替换值

因此,我更改了代码,以便用户在开始而不是结束时键入。他还提到:

无论您如何更改该值,如果您在输入仍然集中的情况下更改它,则会影响输入的可用性,因为它会以某种方式更改插入点。我更喜欢在事后更改它,而不是在不干扰用户输入的情况下进行更改。例如,关于模糊

这里的这部分绝对是首选。我刚才带了一个管理员到我的办公桌旁,问他们更喜欢哪一个。他们中的大多数人不喜欢事后改变。他们觉得这很困惑,对他们来说,货币面具的全部目的就是在他们打字的时候清楚地看到他们在输入什么

要明确的是,没有“错误”的方法。您可以改为执行
.blur
,这也很有效。这更多的是关于我们的特定用户喜欢什么

下面是我的更新代码:

currencyMask(“测试”);
函数currencyMask(字段ID){
$(fieldID).keyup(函数(){
如果(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');
}
});
}


所以,嗯。。这个面具实际上应该做什么?它应该把一个输入的数字伪装成货币。因此,当您开始键入100000时,当您键入1000.00时,它会自动格式化数字,而不是使用keyup。让整个事情变得奇怪的是,当您的代码对输入执行任何操作时,您正在键入最后一个位置,因为您正在完全替换该值。@KevinB,我修改了它,使它从开始而不是结束<代码>如果(this.value!=''&&this.value.length>=3){this.value=this.value.replace(/[^\d]/g',).replace(/(\d{2}$)/,'.$1')。replace(/(\d=(\d\d)+(?!\d))/g,'$1';}
这更容易理解吗?另外,你的“keyup”评论解决了这个问题,尽管我不完全确定原因。