Как отправить форму с помощью клавиши Enter в react.Джей?
вот моя форма и метод onClick. Я хотел бы выполнить этот метод, когда нажата кнопка ввода клавиатуры. Как ?
N. B:нет jquery не ценится.
comment: function (e) {
e.preventDefault();
this.props.comment({comment: this.refs.text.getDOMNode().value, userPostId:this.refs.userPostId.getDOMNode().value})
},
<form className="commentForm">
<textarea rows="2" cols="110" placeholder="****Comment Here****" ref="text" /><br />
<input type="text" placeholder="userPostId" ref="userPostId" /> <br />
<button type="button" className="btn btn-success" onClick={this.comment}>Comment</button>
</form>
2 ответа:
изменить
<button type="button"
до<button type="submit"
. УберитеonClick
. Вместо этого сделайте<form className="commentForm" onSubmit={this.onCommentSubmit}>
. Это должно поймать нажатие кнопки и нажатие клавиши возврата.Edit: как говорит Джеймс в комментариях, вы также можете позвонить
event.preventDefault()
в обратном вызове, чтобы остановить страницу пытается загрузитьaction
url.если вы хотите использовать
this
в обратном вызове вы можете использовать функции стрелки:onSubmit={(e) => this.onCommentSubmit(e)}
илиthis.onCommentSubmit = this.onCommentSubmit.bind(this)
в конструкторе или даже в методах стрелки e7onCommentSubmit = (e) => {...}
.
использовать
keydown
событие для этого:input: HTMLDivElement | null = null; onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => { // 'keypress' event misbehaves on mobile so we track 'Enter' key via 'keydown' event if (event.key === 'Enter') { event.preventDefault(); event.stopPropagation(); this.onSubmit(); } } onSubmit = (): void => { if (input.textContent) { this.props.onSubmit(input.textContent); input.focus(); input.textContent = ''; } } render() { return ( <form className="commentForm"> <input className="comment-input" aria-multiline="true" role="textbox" contentEditable={true} onKeyDown={this.onKeyDown} ref={node => this.input = node} /> <button type="button" className="btn btn-success" onClick={this.onSubmit}>Comment</button> </form> ); }