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

Làm cách nào để làm cho sự kiện KeyPress hoạt động trong React JS. Nó sẽ cảnh báo khi enter (keyCode=13) được nhấn.Xử lý sự kiện KeyPress trong reactJs

+10

Vì [v0.11] (http://facebook.github.io/react/blog/2014/07/17/react-v0.11.html#improved-keyboard-event-normalization) React bình thường hóa mã khóa thành chuỗi có thể đọc được. Tôi muốn đề nghị sử dụng những thay vì các mã phím. –

+0

@RandyMorris phản ứng không phải lúc nào cũng chuẩn hóa mã khóa chính xác. Để tạo "+" sẽ cung cấp cho bạn giá trị mã phím là 187 với shiftKey = true, tuy nhiên giá trị "khóa" sẽ được giải quyết thành "Không xác định". – Herr

Trả lời

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

onKeyDown phát hiện keyCode sự kiện.

+7

Thông thường một điều như phím enter được phát hiện thông qua onKeyUp - điều này cho phép người dùng ngừng tương tác nếu anh ta quyết định. sử dụng keyPress hoặc phímDown thực thi ngay lập tức. – Andreas

8

Phản ứng không chuyển cho bạn loại sự kiện bạn có thể nghĩ. Thay vào đó, nó đang đi qua synthetic events.

Trong thử nghiệm ngắn gọn, event.keyCode == 0 luôn đúng. Những gì bạn muốn là event.charCode

22

Đối với tôi onKeyPress các e.keyCode luôn là 0, nhưng e.charCode có giá trị chính xác. Nếu sử dụng onKeyDown mã chính xác trong 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> 
    ); 
    } 
    }); 

Phản ứng Keyboard Sự kiện https://facebook.github.io/react/docs/events.html#keyboard-events

+3

..so nếu bạn quan tâm đến việc sử dụng các phím mũi tên và/hoặc các phím không phải chữ số khác, onKeyDown là dành cho bạn vì chúng sẽ không trả về một keyChar mà là một mã phím. – oskare

86

tôi đang làm việc với Phản ứng 0.14.7, sử dụng onKeyPressevent.key hoạt động tốt.

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

và bạn có thể mô phỏng nó trong các thử nghiệm với: 'Simulate.keyPress (ReactDOM.findDOMNode (component.refs.input), {key:" Enter "});' – sylvain

+0

Cú pháp lạ này trong khai báo hàm handleKeyPress là gì? Chủ yếu là dấu bằng giữa tên và tham số là mới đối với tôi. – Waltari

+0

@Waltari cú pháp ES6 của nó và là một cú pháp thử nghiệm. – anoop

1

muộn để đảng, nhưng tôi đã cố gắng để có được điều này được thực hiện trong nguyên cảo và đến với điều này:

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

này in chìa khóa chính xác ép lên màn ảnh. Vì vậy, nếu bạn muốn trả lời tất cả các lần nhấn "a" khi div được lấy nét, bạn sẽ so sánh e.key với "a" - theo nghĩa đen nếu (e.key === "a").

0

Nếu bạn muốn vượt qua một param động thông qua một chức năng, bên trong một đầu vào động ::

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

Hope this helps một ai đó. :)

Các vấn đề liên quan