Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

React.js: submit form programmatically does not trigger onSubmit event

I want to submit a React form after a click on a link.

To do so I need to submit the form programmatically if the link is clicked.

my problem is : onSubmit handler is not being fired after the form submit .

Here is a code snipped that I made for this purpose:

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') ); 

The handleSubmit is not invoked and the default behavior is executed (the form being submitted). Is this a ReactJs bug or a normal behavior? Is there a way to get the onSubmit handler invoked ?

like image 572
Ahmed Kooli Avatar asked Jun 18 '16 20:06

Ahmed Kooli


People also ask

Is Onsubmit an event?

The onsubmit event is an event that occurs when you try to submit a form. You can put your form validation against this event type. The following example shows how to use onsubmit. Here we are calling a validate() function before submitting a form data to the web server.

How do you submit form without submit button in react JS?

The form can be submitted without using submit button by implementing a specific event attribute or by clicking the link. This task can be done by using the OnClick event attribute or by using the form. submit() method in Javascript.

What does Onsubmit in form do?

The purpose of the HTML onsubmit attribute is to execute the code specified, when the associated form is submitted. HTML onsubmit attribute supports form element. Script.


1 Answers

I have success with this. This triggers the handleSubmit upon clicking. Hope this helps.

<form   onSubmit={this.handleSubmit}   ref={ (ref) => { this.form = ref; } } >     <a onClick={ () => { this.form.dispatchEvent(new Event('submit')) } }>         Validate     </a> </form> 

Found from here: https://github.com/facebook/react/issues/6796

like image 115
Melvin Avatar answered Sep 16 '22 14:09

Melvin