ReactJs - onKeyPress事件处理

use*_*079 181 javascript keypress onkeypress reactjs

如何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);
Run Code Online (Sandbox Code Playgroud)

Hav*_*ven 176

我正在使用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>
     );
}
Run Code Online (Sandbox Code Playgroud)

  • 并且你可以在测试中使用它来模拟它:`Simulate.keyPress(ReactDOM.findDOMNode(component.refs.input),{key:"Enter"});` (16认同)
  • @Waltari它是ES6 [arrow function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions),意思是`function handleKeyPress(event){...}` (4认同)
  • 也许这很古怪,但是值得注意的是,最好使用event = key =='Enter'的严格相等的'===`检查。 (4认同)
  • 你说实验是什么意思?我认为使用ES6“ functionName(param)=&gt; {}”会起作用吗? (2认同)
  • 它也绑定`this` (2认同)

use*_*079 49

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

onKeyDown检测keyCode事件.

  • 通常是通过onKeyUp检测到输入键的东西 - 这允许用户在他决定时停止交互.使用keyPress或keyDown立即执行. (10认同)

bla*_*nut 45

对我来说,onKeyPresse.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>
      );
    }
  });
Run Code Online (Sandbox Code Playgroud)

React Keyboard Events https://facebook.github.io/react/docs/events.html#keyboard-events

  • ..如果您对使用箭头键和/或其他非字母数字键感兴趣,onKeyDown适合您,因为它们不会返回keyChar而是返回keyCode. (8认同)
  • 对于那些有兴趣尝试自己使用React keyEvent的人,这里是我创建的[codesandbox](https://codesandbox.io/s/o43839o5r6)。 (2认同)

Use*_*NeD 26

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} /> 
}
Run Code Online (Sandbox Code Playgroud)

  • 它还支持`event.key === 'Enter'`。看看[这里](https://www.w3.org/TR/uievents-key/#keys-modifier)。 (2认同)

小智 15

通过访问窗口元素,这对我使用钩子有用

useEffect(() => {
    window.addEventListener('keypress', e => {
      console.log(e.key)
    });
  }, []);
Run Code Online (Sandbox Code Playgroud)


Ben*_*Ben 10

React并没有传递你可能想到的那种事件.相反,它正在传递合成事件.

在简短的测试中,event.keyCode == 0总是如此.你想要的是什么event.charCode


小智 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>
        );
     }
});
Run Code Online (Sandbox Code Playgroud)


waz*_*waz 8

如果要将动态参数传递给函数,请在动态输入内部:

<Input 
  onKeyPress={(event) => {
    if (event.key === "Enter") {
      this.doSearch(data.searchParam)
    }
  }}
  placeholder={data.placeholderText} />
/>
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助。:)


Pep*_*uez 8

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

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


vbu*_*ger 7

晚了聚会,但是我试图在TypeScript中完成这项工作并提出了以下建议:

<div onKeyPress={(e: KeyboardEvent<HTMLDivElement>) => console.log(e.key)}
Run Code Online (Sandbox Code Playgroud)

这将打印在屏幕上的确切键。因此,如果要在div处于焦点状态时响应所有“ a”按下,则可以将e.key与“ a”进行比较-字面上是if(e.key ===“ a”)。

  • 这似乎不起作用。/sf/ask/3045277511/?utm_medium=organic&amp;utm_source=google_rich_qa&amp;utm_campaign=google_rich_qa (2认同)

Dav*_*Lin 5

按键事件方面存在一些挑战。扬·沃尔特(Jan Wolter)关于关键事件的文章有些陈旧,但是很好地解释了为什么很难检测关键事件。

注意事项:

  1. keyCodewhichcharCode具有不同的值/从KEYUP和KEYDOWN在按键的意思。它们均已弃用,但在主要浏览器中受支持。
  2. 操作系统,物理键盘,浏览器(版本)都可能对键代码/值产生影响。
  3. key并且code是最新标准。但是,在撰写本文时,浏览器还没有很好地支持它们。

为了处理react应用中的键盘事件,我实现了react-keyboard-event-handler。请看一看。