onKeyPress
イベントをReactJSで機能させるにはどうすればいいですか?enter (keyCode=13)
が押されると警告します。
var Test = React.createClass({
add: function(event){
if(event.keyCode == 13){
alert('Adding....');
}
},
render: function(){
return(
<div>
<input type="text" id="one" onKeyPress={this.add} />
</div>
);
}
});
React.render(<Test />, document.body);
私はReact 0.14.7で作業しています。onKeyPress
を使用し、event.key
はうまく機能します。
handleKeyPress = (event) => {
if(event.key == 'Enter'){
console.log('enter press here! ')
}
}
render: function(){
return(
<div>
<input type="text" id="one" onKeyPress={this.handleKeyPress} />
</div>
);
}
render: function(){
return(
<div>
<input type="text" id="one" onKeyDown={this.add} />
</div>
);
}
onKeyDown
はkeyCode
イベントを検出します。
私にとってonKeyPress
はe.keyCode
は常に0
ですが、e.charCode
は正しい値を持ちます。 onKeyDown
を使用した場合はe.charCode
内の正しいコード。
var Title = React.createClass({
handleTest: function(e) {
if (e.charCode == 13) {
alert('Enter... (KeyPress, use charCode)');
}
if (e.keyCode == 13) {
alert('Enter... (KeyDown, use keyCode)');
}
},
render: function() {
return(
<div>
<textarea onKeyPress={this.handleTest} />
</div>
);
}
});
リアクトキーボードイベント https://facebook.github.io/react/docs/events.html#keyboard-events
var Test = React.createClass({
add: function(event){
if(event.key === 'Enter'){
alert('Adding....');
}
},
render: function(){
return(
<div>
<input type="text" id="one" onKeyPress={(event) => this.add(event)}/>
</div>
);
}
});
Reactはあなたが考えるかもしれない種類の出来事をあなたに渡していません。それどころか、 合成イベントを渡しています 。
簡単なテストでは、event.keyCode == 0
は常に真です。欲しいのはevent.charCode
です
動的入力内で、動的パラメータを関数に渡したい場合は、
<Input
onKeyPress={(event) => {
if (event.key === "Enter") {
this.doSearch(data.searchParam)
}
}}
placeholder={data.placeholderText} />
/>
これが誰かに役立つことを願っています。 :)
パーティーに遅れたが、私はこれをTypeScriptでやろうとしていたし、これを思い付いた:
<div onKeyPress={(e: KeyboardEvent<HTMLDivElement>) => console.log(e.key)}
これはスクリーンに押された正確なキーを印刷します。したがって、divにフォーカスがあるときにすべての "a"プレスに応答したい場合は、e.keyを "a"と比較します - 文字通りif(e.key === "a")。
キープレスイベントに関しては、いくつかの課題があります。 Jan Wolterのキーイベントに関する記事 は少し古くなっていますが、キーイベントの検出が難しい場合がある理由はよく説明されています。
注意すべき点がいくつかあります。
keyCode
、which
、charCode
は、キー入力やキー入力とは異なるキーの値/意味を持ちます。これらはすべて非推奨ですが、主要なブラウザではサポートされています。key
とcode
は最近の標準です。しかし、これらは執筆時点ではブラウザによって十分にサポートされていません。反応アプリでキーボードイベントに取り組むために、 react-keyboard-event-handler を実装しました。ご覧ください。
Keypressイベントは非推奨です。代わりにKeydownイベントを使用する必要があります。
https://developer.mozilla.org/en-US/docs/Web/API/Document/keypress_event
handleKeyDown(event) {
if(event.keyCode === 13) {
console.log('Enter key pressed')
}
}
render() {
return <input type="text" onKeyDown={this.handleKeyDown} />
}