我在我的页面上设置了这个设置,如果输入为空,则将输入自动设置为0。但是,输入不允许我输入[或识别]小数/点。你知道为什么会发生这种情况吗?
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块,它应该可以工作。
编辑-基于注释
我不确定您的确切用例,但有几种方法可以处理默认为零的输入字段,并让用户用自己的值/s替换它。您可以使用setState
并将该状态传递给value
属性,也可以使用defaultValue={0}
。其中任何一个都允许用户正常更新字段。
或者,您可以将type
属性设置为number
,这将根据您的要求处理0-9
和.
。
你不能做的是,使输入总是设置为0
,当输入是空的(如在你的if
块),而不是有一个0
在开始,因为用户将无法删除它。
感谢@Kerron的反馈,并指出问题发生的原因,然而defaultValue={0}
在我的情况下不起作用,这是解决方案,似乎最适合我的场景:
if(e.target.value.charAt(0) == '0' && e.target.value > 0) {
e.target.value = e.target.value.substring(1)
}