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

KeyPress etkinliğini React JS'de nasıl çalıştırabilirim. enter (keyCode=13) basıldığında uyarı yapmalıdır.KeyPress olay yönetimi reaJS

+10

[v0.11] (http://facebook.github.io/react/blog/2014/07/17/react-v0.11.html#improved-keyboard-event-normalization) React normalizes okunabilir dizelere anahtar kodlar. KeyCodes yerine bunları kullanmanızı öneririz. –

+0

@RandyMorris tepki, anahtar kodlarını her zaman doğru şekilde normalleştirmez. "+" Üretmek için shiftKey = true ile 187 anahtar kod değerini verir, ancak "anahtar" değeri "Tanımlanamayan" olarak çözülür. – Herr

cevap

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

onKeyDownkeyCode olayları algılar.

+7

Genellikle, giriş anahtarı onKeyUp aracılığıyla algılanır - bu, kullanıcının karar verirse etkileşimi durdurmasına izin verir. keyPress veya keyDown kullanılarak hemen yürütülür. – Andreas

8

Tepki, aklınıza gelebilecek türden olayları aktarmıyor. Aksine, synthetic events geçiyor.

Kısa bir testte, event.keyCode == 0 her zaman doğrudur. İstediğin benim onKeyPress için event.charCode

22

e.keyCode daima 0 olduğunu, ancak e.charCode doğru değeri vardır. onKeyDown kullanılıyorsa, e.charCode numaralı telefondan doğru kodu kullanın.

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> 
    ); 
    } 
    }); 

ile çalışıyorum https://facebook.github.io/react/docs/events.html#keyboard-events

+3

.. ok tuşlarını ve/veya diğer alfasayısal olmayan tuşları kullanmayı düşünüyorsanız, bir keyChar, ancak bir keyCode döndürmeyeceği için onKeyDown sizin için. – oskare

86

Klavye Olaylar, 0.14.7 tepki de onKeyPress ve event.key eserlerini kullanmak yanıt verin.

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

ve aşağıdakilerle testlerde simüle edebilirsiniz: 'Simulate.keyPress (ReactDOM.findDOMNode (component.refs.input), {key:" Enter "});' – sylvain

+0

HandleKeyPress işlev bildiriminde bu garip sözdizimi nedir? Temelde isim ile parametre arasındaki eşittir işareti benim için yenidir. – Waltari

+0

@Waltari, ES6 sözdizimini ve deneysel bir sözdizimi. – anoop

1
Geç partiye

ama çalışıyordum Bu tutanak yapılır ve bu geldi almak için:

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

Bu ekrana basıldığında tam anahtarını yazdırır. Yani, div odakta iken tüm "a" basışlarına cevap vermek istiyorsanız, e.key'i "a" ile karşılaştırırsınız - tam anlamıyla (e.key === "a").

0

dinamik girişi :: Bu kimse yardımcı

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

Hope içinde bir işleve aracılığıyla dinamik param geçmek isteseydim. :)