React - 防止表单提交

IT技术 javascript reactjs
2021-01-28 21:21:22

我一直在试验 React。在我的实验中,我使用的是Reactstrap 框架。当我单击一个按钮时,我注意到提交了 HTML 表单。有没有办法在单击按钮时阻止表单提交?

我在这里重新创建了我的问题我的表单非常基本,如下所示:

<Form>
  <h3>Buttons</h3> 
  <p>
    <Button color="primary" onClick={this.onTestClick}>primary</Button>&nbsp;
  </p>
</Form>

我错过了什么?

6个回答

我认为首先值得注意的是,如果没有 javascript(纯 html),则form单击<input type="submit" value="submit form">时元素会提交<button>submits form too</button>在 javascript 中,您可以通过使用事件处理程序并调用e.preventDefault()按钮单击或表单提交来防止这种情况发生e是传递给事件处理程序的事件对象。使用 react,两个相关的事件处理程序可以通过表单 as 获得onSubmit,另一个在按钮上通过onClick

示例:http : //jsbin.com/vowuley/edit?html,js,console,output

+1 这是真的。但请记住,如果您使用,e.preventDefault()您将失去浏览器的本机表单验证。
2021-03-20 21:21:22
@ Sagivb.g但e.preventDefault()onSubmit不会禁用本地验证。
2021-03-27 21:21:22

真的不需要 JS ......只需type向按钮添加一个值为button

<Button type="button" color="primary" onClick={this.onTestClick}>primary</Button>&nbsp;

默认情况下,按钮元素属于“提交”类型,这会导致它们提交其封闭的表单元素(如果有)。更改type为“按钮”可以防止这种情况。

@StormRage,您是否知道如何处理您希望表单使用 Enter 键工作的事件(即不使用提交按钮上的 onClick),但仍想根据状态验证(密码长度)禁用提交按钮例如)
2021-03-16 21:21:22
如果您使用的是表单,这样做将不允许用户按回车键提交表单,在我看来这是一个大问题。
2021-03-29 21:21:22
谢谢你的好回答。仅供参考,这里是有关此处提到的默认行为的参考:developer.mozilla.org/en-US/docs/Web/HTML/Element/...
2021-03-29 21:21:22
最好的用途是使用 JS,因为它是 JS 并涵盖所有场景。
2021-04-09 21:21:22

preventDefault是您要查找的内容。只是阻止按钮提交

<Button onClick={this.onClickButton} ...

代码

onClickButton (event) {
  event.preventDefault();
}

如果您有一个想要以自定义方式处理的表单,您可以捕获更高级别的 onSubmit 事件,这也将阻止该按钮提交。

<form onSubmit={this.onSubmit}>

及以上代码

onSubmit (event) {
  event.preventDefault();

  // custom form handling here
}
谢谢!<form onSubmit={e => { e.preventDefault(); }} >允许我在表单上有一个提交按钮,但在提交表单时没有页面刷新。
2021-03-31 21:21:22

确保将 onSubmit 属性放在表单上而不是按钮上,以防万一您有 from。

<form onSubmit={e => e.preventDefault()}>
    <button onClick={this.handleClick}>Click Me</button>
</form>

确保将按钮 onClick 属性更改为您的自定义函数。

2种方式

第一个我们将参数中的事件直接传递到 onClick 中。

  onTestClick(e) {
    e.preventDefault();
    alert('here');
  }

  // Look here we pass the args in the onClick
  <Button color="primary" onClick={e => this.onTestClick(e)}>primary</Button>&nbsp;

第二个我们将它传递给参数,我们在 onClick 中做得对

  onTestClick() {
    alert('here');
  }

  // Here we did right inside the onClick, but this is the best way
  <Button color="primary" onClick={e => (e.preventDefault(), this.onTestClick())}>primary</Button>&nbsp;

希望能帮上忙