Comment puis-je faire en sorte que l'événement onKeyPress
fonctionne dans ReactJS? Il devrait alerter lorsque enter (keyCode=13)
est appuyé.
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);
Je travaille avec React 0.14.7, utilisez onKeyPress
et event.key
fonctionne bien.
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
détecte les événements keyCode
.
Pour moi onKeyPress
le e.keyCode
est toujours 0
, mais e.charCode
a la valeur correcte. Si utilisé onKeyDown
le code correct dans 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>
);
}
});
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>
);
}
});
Réagir ne vous transmet pas le genre d’événements auxquels vous pourriez penser. Au contraire, il passe événements synthétiques .
Dans un bref test, event.keyCode == 0
est toujours vrai. Ce que vous voulez, c'est event.charCode
Si vous voulez transmettre un paramètre dynamique à une fonction, dans une entrée dynamique:
<Input
onKeyPress={(event) => {
if (event.key === "Enter") {
this.doSearch(data.searchParam)
}
}}
placeholder={data.placeholderText} />
/>
J'espère que ça aide quelqu'un. :)
En retard à la fête, mais j'essayais de le faire dans TypeScript et je l'ai trouvé:
<div onKeyPress={(e: KeyboardEvent<HTMLDivElement>) => console.log(e.key)}
Ceci imprime la touche exacte appuyée à l'écran. Donc, si vous voulez répondre à toutes les pressions "a" lorsque la div est au point, comparez e.key à "a" - littéralement si (e.key === "a").
Il y a quelques défis en ce qui concerne l'événement de frappe au clavier. L'article de Jan Wolter sur les événements clés est un peu vieux mais explique bien pourquoi la détection d'événements clés peut être difficile.
Quelques points à noter:
keyCode
, which
, charCode
ont une valeur/signification différente lorsque vous appuyez sur la touche depuis la touche haut ou le bas. Ils sont tous déconseillés, mais pris en charge par les principaux navigateurs.key
et code
sont la norme récente. Cependant, ils ne sont pas bien supportés par les navigateurs au moment de la rédaction.Pour aborder les événements de clavier dans les applications de réaction, j'ai mis en œuvre react-keyboard-event-handler . Jetez un coup d'oeil s'il vous plait.
L'événement Keypress est obsolète. Vous devez plutôt utiliser l'événement 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} />
}