在React.js中设置onSubmit

Luc*_*oit 88 javascript forms form-submit onsubmit reactjs

提交表单时,我正在尝试doSomething()代替默认的帖子行为.

显然在React中,onSubmit是表单支持的事件.但是,当我尝试以下代码时:

var OnSubmitTest = React.createClass({
    render: function() {
        doSomething = function(){
           alert('it works!');
        }

        return <form onSubmit={doSomething}>
        <button>Click me</button>
        </form>;
    }
});
Run Code Online (Sandbox Code Playgroud)

该方法doSomething()运行,但此后,仍然执行默认的后期行为.

你可以在我的jsfiddle中测试这个.

我的问题:如何防止默认的帖子行为?

Hen*_*son 104

在您的doSomething()函数中,传递事件e并使用e.preventDefault().

doSomething = function (e) {
    alert('it works!');
    e.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)

  • 从v0.13开始,将忽略从事件处理程序返回false,因此您必须使用e.preventDefault()或e.stopPropagation() (16认同)
  • 公平地说,当评论不再相关时,您可能应该删除它们。 (2认同)

Ada*_*one 44

我还建议将事件处理程序移到render之外.

var OnSubmitTest = React.createClass({

  submit: function(e){
    e.preventDefault();
    alert('it works!');
  }

  render: function() {
    return (
      <form onSubmit={this.submit}>
        <button>Click me</button>
      </form>
    );
  }
});
Run Code Online (Sandbox Code Playgroud)


Tru*_*ong 12

<form onSubmit={(e) => {this.doSomething(); e.preventDefault();}}></form>
Run Code Online (Sandbox Code Playgroud)

它对我来说很好


Bol*_*lza 5

您可以将事件作为参数传递给函数,然后阻止默认行为。

var OnSubmitTest = React.createClass({
        render: function() {
        doSomething = function(event){
           event.preventDefault();
           alert('it works!');
        }

        return <form onSubmit={this.doSomething}>
        <button>Click me</button>
        </form>;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 在我的例子中,它可以使用和不使用 `this`:`{this.doSomething}` 或 `{doSomething}` 很好,因为 `doSomething` 与 `render()` 一起使用。 (2认同)