Javascript 输入元素内的动态数字操作,增量加法
所以问题是,我有一个输入窗口,它显示在产品的模式中 为了解决这个问题,Javascript 输入元素内的动态数字操作,增量加法,javascript,Javascript,所以问题是,我有一个输入窗口,它显示在产品的模式中 为了解决这个问题,输入显示为焦点,因此您可以立即输入。为了解决这个问题,默认的值属性是0.00。现在,我想做的是让用户能够动态地输入从最新小数点开始的数字 示例1:所述输入窗口的0.00。我们想输入价格9.00。我们按9一次,按0两次。现在输出为9.00 示例2:我们又有了上述输入窗口。我们想输入价格39.42。我们按3,然后按9,然后按4,然后按2。现在输出为39.42 现在我的问题是,我当前的代码有一些怪癖,不能像我期望的那样工作,但我真的
输入显示为焦点,因此您可以立即输入。为了解决这个问题,默认的值
属性是0.00
。现在,我想做的是让用户能够动态地输入从最新小数点开始的数字
示例1:所述输入窗口的0.00
。我们想输入价格9.00
。我们按9
一次,按0
两次。现在输出为9.00
示例2:我们又有了上述输入窗口。我们想输入价格39.42
。我们按3
,然后按9
,然后按4
,然后按2
。现在输出为39.42
现在我的问题是,我当前的代码有一些怪癖,不能像我期望的那样工作,但我真的没有想法了。让我痛苦的是,这个问题本来应该很琐碎,但我真的不能把我的头绕在它周围
问题:非常不可靠的退格/删除行为。我尝试在按下backspace按钮时检测事件
,并在那里操纵值,但它同样不可靠
旁注:我也认为应该有一个更优雅的方法来解决这个问题。也许是RegEx
非常感谢
生的、半生的、熟的;
const t=document.getElementById('t');
常量getInput=()=>{
设置超时(()=>{
原始=数量(t值);
半稀有=未加工*10;
}, 1)
}
常量setInput=()=>{
done=半稀有。toFixed(2)。toString();
t、 值=完成;
};代码>
您可以在keydown
上捕获密钥并阻止默认操作
<input id="t" type='text' placeholder="0.00" value="0.00">
<script>
const t = document.getElementById('t');
const digits = [];
const numbers = '0123456789';
const display = () => {
t.value = (parseFloat(digits.join('') || '0') / 100).toFixed(2).toString();
}
const handleKeyPress = (event) => {
const key = event.key;
if (numbers.indexOf(key) !== -1) {
digits.push(key);
display();
} else if(key === 'Backspace') {
digits.pop();
display();
}
event.preventDefault();
}
t.addEventListener('keydown', handleKeyPress);
</script>
const t=document.getElementById('t');
常量数字=[];
常量编号='0123456789';
常量显示=()=>{
t、 value=(parseFloat(digits.join(“”)| |“0”)/100.toFixed(2.toString();
}
const handleKeyPress=(事件)=>{
const key=event.key;
如果(数字索引键)!=-1){
数字。按(键);
显示();
}else if(键=='Backspace'){
digits.pop();
显示();
}
event.preventDefault();
}
t、 addEventListener('keydown',handleKeyPress);
t.value=(parseFloat(digits.join(“”)| |“0”)/100.toFixed(2.toString()哇,我印象深刻。我真的忘记了preventDefault
,尽管我最近经常与React合作。做得好!keyCode已弃用@markschulthesis good catch,answer updated(无法在NumPad上测试,但它也应该可以工作。这确实是一个选择,但是const isNumber=/^[0-9]$/i.test(event.key)
可以使用而不是带有索引的数字数组,并且display();
可以通过显示(事件,数字);
然后该函数可以使用事件.currentTarget.value
而不依赖全局t
和数字
尝试此操作,将文本粘贴到字段中