これが私のフォームとonClickメソッドです。キーボードのEnterボタンが押されたときにこのメソッドを実行したいと思います。どうやって ?
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>
<button type="button"
を<button type="submit"
に変更します。 onClick
を削除します。代わりに<form className="commentForm" onSubmit={this.onCommentSubmit}>
を実行してください。これは、ボタンをクリックしてリターンキーを押すのをキャッチするはずです。
編集:Jamesがコメントで述べているように、コールバックでevent.preventDefault()
を呼び出して、action
URLをロードしようとするページを停止することもできます。
コールバックでthis
を使用する場合、コンストラクターでonSubmit={(e) => this.onCommentSubmit(e)}
またはthis.onCommentSubmit = this.onCommentSubmit.bind(this)
、またはe7の矢印メソッドonCommentSubmit = (e) => {...}
の矢印関数を使用できます。
onFormSubmit = e => {
e.preventDefault();
const { name, email } = this.state;
// send to server with e.g. `window.fetch`
}
...
<form onSubmit={this.onFormSubmit}>
...
<button type="submit">Submit</button>
</form>
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>
);
}