ReactJS - Is there a way to trigger a method by pressing the 'Enter' key inside <input/>?

前端 未结 4 688
长情又很酷
长情又很酷 2020-12-31 07:46

Using only onChange and value and while focused inside a , preferably without jQuery, is there a way to trigger a method by pressing

相关标签:
4条回答
  • 2020-12-31 08:26

    Use onKeyPress and the resulting event object's key property, which is normalised cross-browser for you by React:

    <meta charset="UTF-8">
    <script src="https://unpkg.com/react@15.3.1/dist/react.js"></script>
    <script src="https://unpkg.com/react-dom@15.3.1/dist/react-dom.js"></script>
    <script src="https://unpkg.com/babel-core@5.8.38/browser-polyfill.min.js"></script>
    <script src="https://unpkg.com/babel-core@5.8.38/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 讨论(0)
  • 2020-12-31 08:35

    You can add a onKeyPress to your input and make it equal the function you want to execute . You would just need to make sure the key pressed was the enter key using the event that is passed to the function as an argument

    Unfortunately can't just use the onchange method alone to get this result

    0 讨论(0)
  • 2020-12-31 08:41

    What you can do is use React's key events like so:

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

    Now, to detect enter key, change the enterPressed function to:

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

    So what this does is add an event listener to the input element. See React's Keyboard Events. The function enterPressed is then triggered on event, and now enterPressed detects the key code, and if it's 13, do some things.

    Here's a fiddle demonstrating the event.


    Note: The onKeyPress and onKeyDown events trigger instantaneously on user press. You can use onKeyUp to combat this.

    0 讨论(0)
  • 2020-12-31 08:42

    You just simply fire a function like this,

    <input type="text"
     onKeyPress={(event) => {
        var key = event.keyCode || event.which;
        if (key === 13) {
            // perform your Logic on "enter" button 
            console.log("Enter Button has been clicked")
        }
    }}
    />;
    
    0 讨论(0)
提交回复
热议问题