Инициировать событие onblur при нажатии клавиши ввода Enter в React js - PullRequest
0 голосов
/ 20 мая 2019

У меня есть поле ввода текста.Когда пользователь вводит любой текст и нажимает кнопку ввода, мне нужно активировать событие размытия, чтобы убрать фокус, а также проверить ввод текста.

<input style={{marginTop:'20%', marginLeft:'40%'}} value={value} type="text" onFocus={onFocus} onChange={e => setValue(e.target.value)}  onKeyPress={handleKeyPress}/>

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Используйте refs и this.inputRef.current.blur(). Это рабочий раствор.

class App extends React.Component {
  constructor(props) {
    super(props);
    this.inputRef = React.createRef();
    this.state = {
      value: ""
    };
  }
  keypressHandler = event => {
    if (event.key === "Enter") {
      this.setState({ value: this.inputRef.current.value });
      this.inputRef.current.blur();
      this.inputRef.current.value = "";
    }
  };
  render() {
    return (
      <div>
      <label>Enter Text</label>
        <input
          type="text"
          ref={this.inputRef}
          onKeyPress={event => this.keypressHandler(event)}
        />
        <p>{this.state.value}</p>
      </div>
    );
  }
}
ReactDOM.render(<App/>, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id='root' />
1 голос
/ 20 мая 2019

Вместо onKeyPress используйте onKeyDown, который обнаруживает keyCode события.

<input style={{marginTop:'20%', marginLeft:'40%'}} value={value} type="text" onFocus={onFocus} onChange={e => setValue(e.target.value)}  onKeyDown={(e) => this.handleKeyPress(event)}/>

И функция будет как,

handleKeyPress(e){
   if(e.keyCode === 13){
     e.target.blur(); 
     //Write you validation logic here
   }
}
...