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
数字
尝试此操作,将文本粘贴到字段中