【问题标题】:How to only run function when button is submitted with key "Enter" - React Js使用“Enter”键提交按钮时如何仅运行功能 - React Js
【发布时间】:2021-09-21 02:11:34
【问题描述】:

请原谅愚蠢的标题:)

我有一个按钮,单击该按钮会运行一个名为restart 的函数,它只是重置一个状态。我想让此按钮易于访问,因此当您按下选项卡时,按钮会突出显示,提示您按 Enter 或单击它。

基本代码

class Home extends Component{
  restart(){
    this.setState({popup:false,finished:true,started:false,userInput:""})
  }
  render(){
    return(
      <div>
        <button className="btn btn-dark buttons" onClick={this.restart.bind(this)}>Restart</button>
      </div>
    )
  }

点击按钮一切正常,但按下Enter时,页面会重新加载,非常有害。

当使用Enter 键提交按钮时,我如何能够禁用此重新加载,并且仍然调用restart 方法。

【问题讨论】:

    标签: javascript html reactjs page-refresh enter


    【解决方案1】:

    最简单的方法是使用form 并在onSubmit 事件上调用您的restart 方法。这样,键盘用户也可以访问它。不要忘记打电话给event.preventDefault()不要重新加载页面。

    查看下面的演示:

    class Home extends React.Component {
      constructor(props) {
        super(props);
        this.state = { popup: true, finished: false, started: true, userInput: '' };
        this.restart = this.restart.bind(this);
      }
    
      restart(e) {
        // make sure you don't reload the page
        e.preventDefault();
    
        this.setState({
          popup: false,
          finished: true,
          started: false,
          userInput: '',
        });
      }
      render() {
        return (
          <form onSubmit={this.restart}>
            <button className="btn btn-dark buttons" type="submit">
              Restart
            </button>
            <pre>
              {JSON.stringify(this.state, null, 2)}
            </pre>
          </form>
        );
      }
    }
    
    ReactDOM.render(<Home />, document.getElementById('root'));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
    <div id="root"></div>

    【讨论】:

    •  标签在这里做什么?
    • 这个演示只是为了将state显示为预格式化文本。
    • 哦,好的。谢谢你。我会试试这个。
    • 嘿@BuddyBob,我的解决方案有效吗?如果它回答了您的问题,您可以单击复选标记 (✓) 接受它吗?谢谢
    • 遗憾的是,它没有。忘记回复你了。我采用了完全不同的方法,因为这篇文章没有得到任何答案。虽然我可能会把这篇文章留在这里,以防你回答可能会解决其他用户的问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-07-30
    • 2021-10-28
    • 2012-11-23
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多