Today I learned (well, technically, a few days ago, the week has been a lot), that the web platform supports a requestSubmit method. Since the beginning of time (or the beginning of JavaScript), we’ve been able to submit forms like so:
var myForm = document.getElementById('theform');myForm.submit();
I intentionally used getElementById
there as a reminder of what we had before jQuery. Given that, why do we need another method? Two important requests.
Reason the First #
When using submit
, any validation of form fields is completely skipped. Consider this form:
<form method="post" id="theForm"> <p> <label for="name">Name</label> <input id="name" name="name" required> </p> <p> <label for="email">Email</label> <input id="email" name="email" type="email" required> </p> <p> <input type="submit"> </p></form>
I’ve got two fields, both required, with the second field using type email
. If you hit submit, the form will stop itself from POSTing and show errors, but if you submit with JavaScript, that validation is completely ignored.
I added two more buttons to my HTML:
<p> <button id="testSubmit">Test submit()</button> <button id="testRequestSubmit">Test requestSubmit()</button></p>
And wrote some quick JavaScript to demo this:
const $ form = document.querySelector('#theForm');document.querySelector('#testSubmit').addEventListener('click', () => { $ form.submit() });document.querySelector('#testRequestSubmit').addEventListener('click', () => { $ form.requestSubmit() });
Clicking the first button immediately shows that validation is ignored. Clicking either the main submit button in the form or the tester button shows validation working.
Reason the Second #
Not only is validation ignored with submit()
, any submit handler on the form itself is completely ignored. I added this:
$ form.addEventListener('submit', e => { console.log('submit fired on form'); e.preventDefault();});
And again, submit()
ignores it and requestSubmit()
runs it fine. I’m mostly sure I remember this aspect of submit()
, but it’s definitely been a while since I’ve thought about it.
Anyway, everyone loves the web platform. (Except Apple.) Here’s a CodePen showing this in action if you want to see for yourself. (Which is 100% why most of my blog posts exist.)
See the Pen requestSubmit test by Raymond Camden (@cfjedimaster) on CodePen.