There’s a DOM manipulation gotcha in IE10 that just got me, and Google didn’t help much, so I’m giving Google something to show anyone who has this problem in the future.
When you dynamically generate a form input in Internet Explorer 10 the you must set the type attribute before doing anything else to the element, otherwise any values you set will be ignored when submitting the form, and in some cases will not be displayed. When inspecting elements using IE’s developer tools, however, the correct value appears in the generated document tree.
So this works as expected:
var sub = document.createElement('input'); sub.setAttribute('type', 'submit'); sub.setAttribute('value', 'Submit Generated Button');But this doesn't:
var sub = document.createElement('input'); sub.setAttribute('value', 'Submit Generated Button'); sub.setAttribute('type', 'submit');
This is particularly hard to catch with radio buttons and checkboxes, (this is what got me). Their default value is “on” which doesn’t tell me much, especially if you’re submitting an array of them.
Here’s a demo. The first button shows its value, (and submits its value), and the second shows, (and submits) the default of “Submit Query.”
The only documentation I found on this behaviour is a passing sentence in the createElement documentation at MSDN. When they say “then set the type property to the appropriate value in the next line of code” they’re serious about the next line of code.
Also, who chooses “Submit Query” as a default value for a submit button in 2013 anyway? Are they trying to confuse people? Shouldn’t it just be “Submit”?
Thanks for this! I’d had a problem with the occasional form enquiry where the checkbox fields weren’t being included, but hadn’t been able to reproduce the bug—until I eventually tried it in IE10. Your solution solved the issue immediately.
I would have thought it an apparent enough IE quirk that it would be mentioned on w3 or somewhere, but this blog post is literally the only place I’ve seen it even acknowledged. I guess creating html forms in DOM must be out of vogue.
Much appreciated, once again.