JavaScript 输入不允许小数

JavaScript Input not allowing decimals

我的页面上有这个设置,如果输入为空,则自动将输入设置为 0。但是,输入不允许我输入[或识别]一个decimal/dot。知道为什么会发生这种情况以及如何解决这个问题吗?

const updateSettings = (e) => {
        if(e.target.value === '') {
            e.target.value = 0;
        } else {
            e.target.value -= 0;
        }
        dispatch({
            type: 'UPDATE_SETTINGS',
            setting: e.target.name,
            value: e.target.type === 'checkbox' ? e.target.checked : e.target.value
        })

<input type="text" id="amount" name="amount" value={settings.amount} onChange={(e) => updateSettings(e)} />

非常感谢,谢谢!

问题是,当 target.value 不为空时,您尝试从中减去 0。当您输入的值是 . 时,这不会被识别为有效操作,因为您试图减去无法解析为数字 (.) 和数字 ( 0-9).

我不确定为什么需要从 target.value 中减去 0。无论哪种方式,如果你摆脱你的 else 块它应该工作。

编辑 - 根据评论

我不确定您的确切用例,但有几种方法可以处理默认为零的输入字段,并让用户用自己的 value/s 替换它。您可以使用 setState 并将该状态传递给 value 属性,或者您可以使用 defaultValue={0}。任何一个都将允许用户正常更新字段。

或者,您可以将 type 属性设置为 number,这将根据您的要求处理 0-9.

但你不能拥有的是,当输入为空时(如在你的 if 块中),使输入始终设置为 0,并且没有 0 在开头,因为用户将无法删除它。

感谢 @Kerron 的反馈并指出了问题发生的原因,但是 defaultValue={0} 在我的情况下不起作用,这是最适合我的情况的解决方案:

  if(e.target.value.charAt(0) == '0' && e.target.value > 0) {
       e.target.value = e.target.value.substring(1) 
    }