【发布时间】:2018-02-19 02:22:14
【问题描述】:
我正在尝试在 React 中创建一个掩码,但是 onKeyPressed 它不会因为退格或删除而触发。它不允许删除输入。
这是我的代码:
export default class InputField extends React.Component {
constructor(props) {
super(props);
this.state = { text: this.props.text };
this.onKeyPress = this.onKeyPress.bind(this);
}
onKeyPress(event) {
console.log(event.key);
var mask = this.props.mask;
var currentText = this.state.text || "";
var invalidButtonPress = false;
switch (mask) {
case "number":
if ("0123456789".indexOf(event.key) > -1) {
this.setState({ text: currentText + event.key });
} else {
invalidButtonPress = true;
}
break;
default:
break;
}
if (invalidButtonPress) {
// allow for arrow keys, tab and backspace.. but if none of those and invalid reset
this.setState({ text: currentText }); // Reset back to original text
}
}
render() {
<Input
type={this.props.type || "text"}
value={this.state.text}
mask={this.props.mask}
onKeyPress={this.onKeyPress}
>
...
}
}
我尝试过onKeyDown 和OnKeyUp,它们可以检测退格,但这些事件我无法影响this.setState({}) 的输入值。
【问题讨论】:
-
从switch case返回后不需要中断。这是多余的代码。
-
看起来你正在使用自定义输入组件。你必须检查自定义组件的按键事件。
-
是的,我已经检查了按键事件并在控制台记录了它,但它仅在使用退格或删除时才返回任何内容。它无法检测退格或其他特殊字符
标签: javascript reactjs input input-mask