Reputation: 658
Inside a form I have a button. What is the difference between when I submit the form via JavaScript like this
<button onclick="document.forms[0].submit();">
and when I submit it like this
<button type="submit"></button>?
The first one works for me with most browsers except webkit-based. The latter works fine as well. No difference in functionality is apparent to me. Is there one?
Upvotes: 3
Views: 50613
Reputation: 150020
The first example:
<button onclick="document.forms[0].submit();">
...will do two things:
onclick
will submit the first form in the document (i.e., the one specified by the 0 index in forms[0]
).type
attribute specified will be a submit button by default.This two-step double-submit behaviour can be seen in this quick-and-dirty demo: http://jsfiddle.net/fMwuX/ (and is likely to lead to weird behaviour that might be a bit confusing to debug). If the button isn't actually in a form then this won't be a problem.
The second example:
<button type="submit"></button>
Will simply submit the form it is in (if it is in one).
In my opinion the second option is definitely preferable for several reasons, including but not limited to:
forms[0]
.Upvotes: 8
Reputation: 3833
documents.forms[0].submit
will trigger the submission of the first form in your HTML page. Indeed, documents.forms
contains all the forms of your document. You can access them with their name attribute or their index.
Then, the input of type submit
in a form will trigger the submission of his parent form.
Upvotes: 1
Reputation: 16018
As you've discovered, the first one makes the page not work in some circumstances, and is - for this, and other reasons - generally considered bad practice. Use the second.
Upvotes: -1
Reputation: 9034
The javascript example will submit the first form in your HTML document while the second example will submit the form which wraps that button.
Upvotes: 3