2015-01-07 7 views
82
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); 

Wie kann ich das KeyPress-Ereignis in React JS arbeiten. Es sollte eine Warnung ausgeben, wenn enter (keyCode=13) gedrückt wird.KeyPress Ereignisbehandlung in reacts

+10

Seit [v0.11] (http://facebook.github.io/react/blog/2014/07/17/react-v0.11.html#improved-keyboard-event-normalization) reagiert normalisiert Schlüsselcodes in lesbare Zeichenfolgen. Ich würde vorschlagen, diese anstelle der keyCodes zu verwenden. –

+0

@RandyMorris reagiert nicht immer normalisiert Schlüsselcodes korrekt. Für die Erzeugung von "+" erhalten Sie den Schlüsselcodewert von 187 mit shiftKey = true, aber der "Schlüssel" -Wert wird zu "Nicht identifiziert" aufgelöst. – Herr

Antwort

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

onKeyDown erkennt keyCode Ereignisse.

+7

Normalerweise wird eine Sache wie die Enter-Taste über onKeyUp erkannt - dies ermöglicht dem Benutzer, die Interaktion zu beenden, wenn er sich entscheidet. Mit keyPress oder keyDown wird sofort ausgeführt. – Andreas

8

React übergibt Ihnen nicht die Art von Ereignissen, die Sie vielleicht denken. Eher passiert es synthetic events. In einem kurzen Test ist event.keyCode == 0 immer wahr. Was Sie wollen, ist event.charCode

22

Für mich onKeyPress die e.keyCode ist immer 0, aber e.charCode richtigen Wert hat. Bei Verwendung onKeyDown den richtigen Code in 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> 
    ); 
    } 
    }); 

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

+3

..so, wenn Sie daran interessiert sind, die Pfeiltasten und/oder andere nicht-alphanumerische Tasten zu verwenden, ist onKeyDown für Sie, da sie keinen keyChar, sondern einen keyCode zurückgeben. – oskare

86

ich mit 0.14.7 Reagieren arbeite, benutzen onKeyPress und event.key funktioniert gut.

handleKeyPress = (event) => { 
    if(event.key == 'Enter'){ 
    console.log('enter press here! ') 
    } 
} 
render: function(){ 
    return(
     <div> 
      <input type="text" id="one" onKeyPress={this.handleKeyPress} /> 
     </div> 
    ); 
} 
+4

und Sie können es simulieren in testet es mit: 'Simulate.keyPress (ReactDOM.findDOMNode (component.refs.input), {key:" Enter "});' – sylvain

+0

Was ist das komische Syntax in der handleKeyPress Funktionsdeklaration? Hauptsächlich ist das Gleichheitszeichen zwischen dem Namen und dem Parameter für mich neu. – Waltari

+0

@Waltari seine ES6-Syntax und ist eine experimentelle Syntax. – anoop

1

spät zur Party, aber ich habe versucht, dies in Typoskript getan und kam mit dieser:

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

Dieser druckt die genaue Schlüssel auf den Bildschirm gedrückt. Wenn Sie also auf alle "a" -Drücke reagieren möchten, während das div scharf ist, vergleichen Sie e.key mit "a" - wörtlich wenn (e.key === "a").

0

Wenn Sie eine dynamische param bis hin zu einer Funktion, in einem dynamischen Eingang passieren wollen ::

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

Hope this jemand hilft. :)