138

I want to pass TextField values when user press enter key from keyboard. In onChange() event, I am getting the value of the textbox, but How to get this value when enter key is pressed ?

Code:

import TextField from 'material-ui/TextField';

class CartridgeShell extends Component {

   constructor(props) {
      super(props);
      this.state = {value:''}
      this.handleChange = this.handleChange.bind(this);
   }

   handleChange(e) {
      this.setState({ value: e.target.value });
   }

   render(){
      return(
         <TextField 
             hintText="First Name" 
             floatingLabelText="First Name*"
             value={this.state.value} 
             onChange={this.handleChange} 
             fullWidth={true} />
      )
   }
}
2
  • 1
    where is your codes to show you tried? Commented Apr 13, 2017 at 5:17
  • It seems like mui prevents use of native browser functionality, forcing manual reimplementation using somewhat lower level code (manually checking keypresses). Am I missing something? (Honest question, I'm new to mui and trying to reorient my thinking.) Commented Mar 13, 2019 at 17:53

5 Answers 5

150

Use onKeyDown event, and inside that check the key code of the key pressed by user. Key code of Enter key is 13, check the code and put the logic there.

Check this example:

class CartridgeShell extends React.Component {

   constructor(props) {
      super(props);
      this.state = {value:''}

      this.handleChange = this.handleChange.bind(this);
      this.keyPress = this.keyPress.bind(this);
   } 
 
   handleChange(e) {
      this.setState({ value: e.target.value });
   }

   keyPress(e){
      if(e.keyCode == 13){
         console.log('value', e.target.value);
         // put the login here
      }
   }

   render(){
      return(
         <input value={this.state.value} onKeyDown={this.keyPress} onChange={this.handleChange} fullWidth={true} />
      )
    }
}

ReactDOM.render(<CartridgeShell/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>


<div id = 'app' />

Note: Replace the input element by Material-Ui TextField and define the other properties also.

Sign up to request clarification or add additional context in comments.

2 Comments

KeyboardEvent.keyCode is deprecated, maybe we should use KeyboardEvent.key or KeyboardEvent.code instead ?
Use e.key === "Enter" instead
94

Adding onKeyPress will work onChange in Text Field.

<TextField
  onKeyDown={(ev) => {
    console.log(`Pressed keyCode ${ev.key}`);
    if (ev.key === 'Enter') {
      // Do code here
      ev.preventDefault();
    }
  }}
/>

8 Comments

This doesn't explain how to get the value of the target TextField in the callback specified for onKeyPress.
how do you actually get the value of the TextFiled?
control the component and useState for value
onKeyPress happens before the field's value is actually set. Crap, i know. You can get the value of the textfield with the onChange prop... onChange={ ev => console.log(ev.target.value) }
@Neil, @PLO - ev.target.value
|
14

You can use e.target.value to get the current value of the input element if you're using uncontrolled mode.

<TextField
  onKeyPress={(e) => {
    if (e.key === 'Enter') {
      alert(e.target.value);
    }
  }}
/>

Live Demo

Codesandbox Demo

4 Comments

This has nothing to do with MUI v5. This is regular DOM event which any version of the TextField component exposes to developers.
@vsync sorry for the confusion, I've updated this answer..
But why did you give an exact same answer (recently) when the same ones were given here years ago?
your demo isn't working
2
<input onKeyPress={onKeyPress}/> 

const onKeyPress = (e: any) => { if (e.which == 13) { // your function }};

Comments

0

html

<input id="something" onkeyup="key_up(this)" type="text">

script

function key_up(e){
    var enterKey = 13; //Key Code for Enter Key
    if (e.which == enterKey){
        //Do you work here
    }
}

Next time, Please try providing some code.

4 Comments

Please ask the OP for what they have tried before posting your own code.
why define enterKey and using memory when you can just write 13 in the if
@amirhoseinahmadi Nobody cares about memory these days as much as writing clean and understandable code. I have prettier in place in my project which does not let me use any magic numbers. It enforces to use a const instead, to define what number is about. I would prefer to see enterKey than just 13
Next time, Please try providing some information about your code.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.