问题描述
我正在尝试将文本字段中的键输入限制为数字或退格键或空格,因此我在设置状态之前进行检查,并在其他情况下防止事件的默认行为,但我无法找到event.which
事件或keyCode
的属性。
我尝试event.persist()
进行查看,但仍然相同,在which
中没有名称为event
的属性。which
的{{1}}中有一个nativeEvent
,但始终为0。
这是我app.js中使用的组件,我使用的是Material-ui的文本字段,而不是常规输入。
event
:
MobileNumber.tsx
解决方法
两个可能的问题:
-
which
和keyCode
均已弃用,因此,React的合成事件没有它们并不奇怪。现代属性是key
。例如,这个:
if (event.which != 8 && event.which != 0 && (event.which < 48 || event.which > 57)) {
可以这样写:
if (event.key !== "Backspace" && event.key !== "" && (event.key < "0" || event.key > "C")) {
-
请注意,
change
事件是普通的Event
,而不是KeyboardEvent
。它没有特定于键的信息,因为它不是特定于键的事件。如果您需要知道按下了什么键(在这种情况下,keydown
可能就是您想要的),请改用按键事件。
旁注:在您的示例中没有理由调用persist
,在事件处理程序返回后,您不会尝试使用属性。通常,避免使用persist
。如果在处理程序返回后不需要需要key
,则可以将其获取到本地变量:
const { key } = event;
// ...use `key`...