如何让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);
答案 0 :(得分:158)
我正在使用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>
);
}
答案 1 :(得分:46)
render: function(){
return(
<div>
<input type="text" id="one" onKeyDown={this.add} />
</div>
);
}
onKeyDown
检测到keyCode
个事件。
答案 2 :(得分:40)
对于我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>
);
}
});
React键盘事件 https://facebook.github.io/react/docs/events.html#keyboard-events
答案 3 :(得分:10)
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>
);
}
});
答案 4 :(得分:9)
React没有传递你可能想到的那种事件。相反,它正在通过synthetic events。
在简短的测试中,event.keyCode == 0
始终是真的。你想要的是event.charCode
答案 5 :(得分:6)
如果你想在动态输入::
中将动态参数传递给函数<Input
onKeyPress={(event) => {
if (event.key === "Enter") {
this.doSearch(data.searchParam)
}
}}
placeholder={data.placeholderText} />
/>
希望这有助于某人。 :)
答案 6 :(得分:5)
参加晚会,但我试图在TypeScript中完成这项工作,并想出了这个:
<div onKeyPress={(e: KeyboardEvent<HTMLDivElement>) => console.log(e.key)}
这会打印按下屏幕的确切键。所以,如果你想回应所有&#34; a&#34;当div处于焦点时按下,你可以将e.key与&#34; a&#34;进行比较。 - 字面意思是(e.key ===&#34; a&#34;)。
答案 7 :(得分:3)
在按键事件方面存在一些挑战。 Jan Wolter's article on key events有点旧,但解释为什么关键事件检测可能很难。
有几点需要注意:
keyCode
,which
,charCode
在keyup和keydown的keypress中具有不同的价值/含义。它们都已弃用,但在主流浏览器中受支持。key
和code
是最近的标准。但是,在撰写本文时,浏览器并没有很好地支持它们。 为了解决反应应用中的键盘事件,我实施了react-keyboard-event-handler。请看看。
答案 8 :(得分:1)
您需要在keyPress事件上调用 event.persist(); 此方法。 示例:
const MyComponent = (props) => {
const keyboardEvents = (event) =>{
event.persist();
console.log(event.key); // this will return string of key name like 'Enter'
}
return(
<div onKeyPress={keyboardEvents}></div>
)
}
如果您现在在console.log(event)
函数中键入keyboardEvents
,您将获得其他属性,例如:
keyCode // number
charCode // number
shiftKey // boolean
ctrlKey // boolean
altKey // boolean
还有许多其他属性
感谢与问候
PS:React版本:16.13.1
答案 9 :(得分:0)
不建议使用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} />
}
答案 10 :(得分:0)
这对我使用钩子有用,通过访问窗口元素
useEffect(() => {
window.addEventListener('keypress', e => {
console.log(e.key)
});
}, []);