Как обработать событие 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);
Ответы
Ответ 1
Я работаю с 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>
);
}
Ответ 2
render: function(){
return(
<div>
<input type="text" id="one" onKeyDown={this.add} />
</div>
);
}
onKeyDown
обнаруживает события keyCode
.
Ответ 3
Для меня 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>
);
}
});
Реакция событий клавиатуры.
Ответ 4
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>
);
}
});
Ответ 5
Реагент не передает вам те события, которые вы могли бы подумать. Скорее, это передача синтетических событий.
В кратком тесте event.keyCode == 0
всегда истинно. Вы хотите event.charCode
Ответ 6
Поздно на вечеринке, но я пытался сделать это в TypeScript и придумал это:
<div onKeyPress={(e: KeyboardEvent<HTMLDivElement>) => console.log(e.key)}
Это печатает точную клавишу, нажатую на экран. Поэтому, если вы хотите реагировать на все нажатия "а", когда div находится в фокусе, вы бы сравнили e.key с "a" - буквально if (e.key === "a").
Ответ 7
Если вы хотите передать динамический параметр в функцию внутри динамического ввода:
<Input
onKeyPress={(event) => {
if (event.key === "Enter") {
this.doSearch(data.searchParam)
}
}}
placeholder={data.placeholderText} />
/>
Надеюсь, это кому-нибудь поможет. :)
Ответ 8
Есть некоторые проблемы, когда дело доходит до события нажатия клавиши. Статья Яна Вольтера о ключевых событиях немного устарела, но хорошо объясняет, почему обнаружение ключевых событий может быть трудным.
Несколько вещей, на которые стоит обратить внимание:
-
keyCode
, which
, charCode
имеет другое значение/значение при charCode
клавиш и keyup. Все они устарели, однако поддерживаются в основных браузерах. - Операционная система, физические клавиатуры, браузеры (версии) могут оказывать влияние на код/значения клавиш.
-
key
и code
являются последним стандартом. Тем не менее, они не очень хорошо поддерживаются браузерами на момент написания.
Чтобы заняться событиями клавиатуры в приложениях реагирования, я реализовал обработчик реакции-клавиатуры-события. Пожалуйста, посмотрите.
Ответ 9
Событие нажатия клавиш устарело. Вместо него следует использовать событие 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} />
}