onChange
と値のみを使用し、<input/>
の内部に焦点を合わせながら、できればjQueryを使用せずに、Enterキーを押してメソッドをトリガーする方法はありますか?なぜなら、ユーザーはname
文字列の状態を更新するために「Enter」キーを押すことだけを望んでいるからです。
これがコードです:
constructor(props) {
super(props);
this.state = {
name: '',
}
}
textChange(event) {
this.setState({
name: event.target.value,
})
}
//Would like to trigger this once 'Enter' key is pressed while focused inside `<input/>`
enterPressed() {
var name = this.state.name;
}
render() {
return (
<input
placeholder='Enter name'
onChange={this.textChange.bind(this)}
value={this.state.name}
/>
)
}
あなたができることは、Reactの主要なイベントを次のように使用することです。
<input
placeholder='Enter name'
onChange={this.textChange.bind(this)}
value={this.state.name}
onKeyPress={this.enterPressed.bind(this)}
/>
Enterキーを検出するには、enterPressed
関数を次のように変更します。
enterPressed(event) {
var code = event.keyCode || event.which;
if(code === 13) { //13 is the enter keycode
//Do stuff in here
}
}
つまり、これは入力要素にイベントリスナーを追加することです。 Reactのキーボードイベント を参照してください。次に、関数enterPressed
がイベントでトリガーされ、enterPressed
がキーコードを検出し、13の場合はいくつかの処理を行います。
これが fiddle でイベントを示しています。
注:onKeyPress
およびonKeyDown
イベントは、ユーザーが押すと即座にトリガーされます。 onKeyUp
を使用してこれと戦うことができます。
onKeyPress
と、結果のイベントオブジェクトのkey
プロパティを使用します。これは、Reactによって正規化されたクロスブラウザーです。
<meta charset="UTF-8">
<script src="https://unpkg.com/[email protected]/dist/react.js"></script>
<script src="https://unpkg.com/[email protected]/dist/react-dom.js"></script>
<script src="https://unpkg.com/[email protected]/browser-polyfill.min.js"></script>
<script src="https://unpkg.com/[email protected]/browser.min.js"></script>
<div id="app"></div>
<script type="text/babel">
var App = React.createClass({
getInitialState() {
return {
name: ''
}
},
handleChange(e) {
this.setState({name: e.target.value})
},
handleKeyPress(e) {
if (e.key === 'Enter') {
alert('Enter pressed')
}
},
render() {
return <input
placeholder='Enter name'
onChange={this.handleChange}
onKeyPress={this.handleKeyPress}
value={this.state.name}
/>
}
})
ReactDOM.render(<App/>, document.querySelector('#app'))
</script>
OnKeyPressを入力に追加して、実行する関数と同じにすることができます。引数として関数に渡されるイベントを使用して、押されたキーがEnterキーであることを確認する必要があるだけです。
残念ながら、この結果を得るためにonchangeメソッドだけを使用することはできません