2017-12-14 2 views
0

ユーザーがテキストエリアで「入力」を押したときにフォームを送信するにはどうすればよいですか?デフォルトの動作は、改行をテキストエリアに挿入することです。Reactのテキストエリアで入力を押したときにフォームを送信しますか?

<form className="" onSubmit={newComment}> 
     <textarea type="text" rows="3" name="body" /> 
     <button className="btn" type="submit"> 
      Comment 
     </button> 
    </form> 

私はtextareaにonChangeイベントがあり、Enterキーが押されたかどうかを確認する関数テストが必要ですか?これは私がバニラのJavaScriptを使って行う方法ですが、Reactの合成イベントでキーイベントを見つけることができませんでした。

+0

'onKeyDown'ハンドラを使用し、' event.keyCode'をチェックすると動作します。 [Working Fiddle] –

答えて

2

あなたのtextareaは制御されていない要素です。これは許容されるアプローチですが、フェイスブックは制御された入力の使用を奨励します。

とにかく、ここで制御されていないフォームのためにそれを行う方法です:あなたはまた、上記の代わりにrefsidを使用することができます

onEnterPress = (e) => { 
    if(e.keyCode == 13 && e.shiftKey == false) { 
    e.preventDefault(); 
    this.myFormRef.submit(); 
    } 
} 

render() { 
    return (
    <form ref={el => this.myFormRef = el} className=""> 
     <textarea type="text" rows="3" name="body" onKeyDown={this.onEnterPress} /> 
     <button className="btn" type="submit"> 
     Comment 
     </button> 
    </form> 
); 
} 

+0

refの代わりにsubmit関数を 'newComment()'とも呼ぶことができます。 –

+0

@MayankShukla、true。私はオペレーションコードのどこにでもその関数を見ることができないので、そのビットを除外しました。 – Chris

関連する問題