【问题标题】:ReactJs Input: onKeyPressed does not fire for backspaceReactJs 输入:onKeyPressed 不会触发退格键
【发布时间】: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}
        >
        ...
    }
}

我尝试过onKeyDownOnKeyUp,它们可以检测退格,但这些事件我无法影响this.setState({}) 的输入值。

【问题讨论】:

  • 从switch case返回后不需要中断。这是多余的代码。
  • 看起来你正在使用自定义输入组件。你必须检查自定义组件的按键事件。
  • 是的,我已经检查了按键事件并在控制台记录了它,但它仅在使用退格或删除时才返回任何内容。它无法检测退格或其他特殊字符

标签: javascript reactjs input input-mask


【解决方案1】:

我已经尝试过 onKeyDown 和 OnKeyUp,它们确实可以检测退格,但是这些事件我无法通过 this.setState({}) 影响输入的值

React 允许您混合和匹配这些事件。因此,您可以保留 onKeyPress 以添加到您的输入,并使用 onKeyDownonKeyUp 删除。

【讨论】:

  • 混合搭配有什么帮助?如果我在 keyDown 或 keyUp 上捕捉到退格键,keyPressed 将在它之后触发并且仍然恢复我的输入,因为 event.key 不等于 0123456789?
猜你喜欢
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多