我想在单击链接后提交 React 表单。
为此,如果单击链接,我需要以编程方式提交表单。
我的问题是: onSubmit
表单提交后处理程序没有被触发。
这是我为此目的制作的代码片段:
var MyForm = React.createClass({
handleSubmit: function(e){
console.log('Form submited');
e.preventDefault();
},
submitForm : function(e){
this.refs.formToSubmit.submit();
},
render: function() {
return (
<form ref="formToSubmit" onSubmit={this.handleSubmit}>
<input name='myInput'/>
<a onClick={this.submitForm}>Validate</a>
</form>);
}
});
ReactDOM.render(
<MyForm name="World" />,
document.getElementById('container')
);
handleSubmit
未被调用并执行默认行为(正在提交的表单)。这是 ReactJs 错误还是正常行为?有没有办法调用 onSubmit 处理程序?
原文由 Ahmed Kooli 发布,翻译遵循 CC BY-SA 4.0 许可协议
2021 年更新
已接受答案的解决方案对我不起作用,因此我决定更新此主题。
React 16(及更早版本)
在原始答案中,缺少 Event 构造函数的第二个参数。没有
{cancelable: true}
参数,preventDefault()
方法无法运行。React 17(以及未来可能更新的版本)
在当前版本的 React (17) 中,事件委托发生了相当大的变化(详情请见 此处)。因此,上述解决方案需要稍作改进才能与该版本的库一起使用。此更改是
bubbles: true
参数。工作代码如下所示: