2016-09-12 7 views
3

onChangeと値だけを使用し、<input/>の中にフォーカスしている間、好ましくはjQueryを使用しないで、 'Enter'キーを押してメソッドをトリガする方法はありますか?ユーザがname文字列の状態を更新するために、 'Enter'キーを押すだけでよいからです。ここでReactJS - <input/>の中にある 'Enter'キーを押してメソッドをトリガーする方法はありますか?

はコードです:

constructor(props) { 
    super(props); 

    this.state = { 
     name: '', 
    } 
    } 

    textChange(event) { 
    this.setState({ 
     name: event.target.value, 
    }) 
    } 

    //Would like to trigger this once 'Enter' key is pressed while focused inside `<input/>` 
    enterPressed() { 
    var name = this.state.name; 
    } 

    render() { 
    return (
     <input 
      placeholder='Enter name' 
      onChange={this.textChange.bind(this)} 
      value={this.state.name} 
     /> 
    ) 
    } 

答えて

2
この結果を得るために単独でのonchangeメソッドを使用することはできませんしてあなただけの何

確認キーを押すようにする必要があります行うことができます使用することは、のようになどの主要なイベントに反応します

<input 
    placeholder='Enter name' 
    onChange={this.textChange.bind(this)} 
    value={this.state.name} 
    onKeyPress={this.enterPressed.bind(this)} 
/> 

、キーを入力して検出するにenterPressed機能を変更します。

enterPressed(event) { 
    var code = event.keyCode || event.which; 
    if(code === 13) { //13 is the enter keycode 
     //Do stuff in here 
    } 
} 

これは、input要素にイベントリスナーを追加することです。 React's Keyboard Eventsを参照してください。次に、イベント時にenterPressedがトリガーされ、今度はenterPressedがキーコードを検出し、13の場合は何らかの処理を行います。

ここにイベントを示すfiddleがあります。


注:onKeyPressonKeyDownイベントは、ユーザーのプレスに瞬時にトリガします。これに対処するのにonKeyUpを使うことができます。

+0

event.keyCodeとは何か||イベント。それは? –

+0

@LyManeug実際、ブラウザに依存しています。[here](http://stackoverflow.com/questions/4471582/javascript-keycode-vs-which)を参照してください。ブラウザが 'keyCode'や' which'をサポートしていない場合に備えておくことは良いことです。 '||'は、他のものがヌルか未定義/サポートされていない、基本的にはフォールバックであるかどうかに基づいてオプションを選択するだけです。 – Li357

+0

明確にするために、 'onKeyPress'の代わりに' onKeyUp' upを使うべきですか?どちらが正しいものであるかについて混乱しています。 –

1

あなたの入力にonKeyPressイベントを追加し、それはあなたが実行したい機能を等しくすることができます。引数として関数に渡されたイベントを使用してキー入力

は残念ながらちょうど

+0

が、私は答えとupvoteを受け入れる前に、あなたが示すことができます例、特に押されたキーがEnterキーであるかどうかを判断する方法は? –

0

使用onKeyPressして反応によってあなたのための正規化されたクロスブラウザで結果のイベントオブジェクトのkeyプロパティ、:

<meta charset="UTF-8"> 
 
<script src="https://unpkg.com/[email protected]/dist/react.js"></script> 
 
<script src="https://unpkg.com/[email protected]/dist/react-dom.js"></script> 
 
<script src="https://unpkg.com/[email protected]/browser-polyfill.min.js"></script> 
 
<script src="https://unpkg.com/[email protected]/browser.min.js"></script> 
 
<div id="app"></div> 
 
<script type="text/babel"> 
 

 
var App = React.createClass({ 
 
    getInitialState() { 
 
    return { 
 
     name: '' 
 
    } 
 
    }, 
 
    handleChange(e) { 
 
    this.setState({name: e.target.value}) 
 
    }, 
 
    handleKeyPress(e) { 
 
    if (e.key === 'Enter') { 
 
     alert('Enter pressed') 
 
    } 
 
    }, 
 
    render() { 
 
    return <input 
 
     placeholder='Enter name' 
 
     onChange={this.handleChange} 
 
     onKeyPress={this.handleKeyPress} 
 
     value={this.state.name} 
 
    /> 
 
    } 
 
}) 
 

 
ReactDOM.render(<App/>, document.querySelector('#app')) 
 

 
</script>

申し訳
+0

私はボタンをhandleKeyPress(e)と同じメソッドにリンクしたいのですが、ボタンがトリガーしたかどうかをどうやって判断するのでしょうか?例えば、 'if(e.key === 'Enter' || //ボタンがそれを引き起こした)'のようなことをしたいと思いますか? –

+0

作成しようとしているUIに 'render()'の例を挙げてもらえますか?これを行う最も簡単な方法は、ボタンのための別の 'onClick'を持ち、別のメソッドを呼び出すことです。' onKeyPress'をテキスト入力の 'Enter 'が押されたときに呼び出す方法です。 –

関連する問題