我如何能使onKeyPress事件工作在ReactJS?当按下回车键(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);

当前回答

render: function(){
     return(
         <div>
           <input type="text" id="one" onKeyDown={this.add} />
        </div>
     );
}

onKeyDown检测keyCode事件。

其他回答

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} /> 
}
render: function(){
     return(
         <div>
           <input type="text" id="one" onKeyDown={this.add} />
        </div>
     );
}

onKeyDown检测keyCode事件。

React不会传递给您您可能认为的那种事件。相反,它是传递合成事件。

在一个简短的测试中,事件。keyCode == 0总是true。你需要的是event.charCode

除了onKeyPress被弃用之外,我认为onKeyUp是一个比onKeyDown更好的选择,因为它直到键被释放才被执行

<Element
   onKeyUp={(e) => {
        if (e.key === "Enter") console.log('Enter has press);
   }}
/>

来晚了,但我试图在TypeScript中完成这个,并想出了这个:

<div onKeyPress={(e: KeyboardEvent<HTMLDivElement>) => console.log(e.key)}

这将打印按到屏幕上的精确键。因此,如果你想在div聚焦时响应所有的“a”键,你可以将e.key与“a”进行比较——字面意思是if(e。Key === "a")。