- From: Thomas Broyer <t.broyer@gmail.com>
- Date: Wed, 21 Mar 2007 18:49:32 +0100
2007/3/21, Christian Schmidt: > Martin Atkins skrev: > > It would be useful to be able to mark certain submit buttons as > > non-validating. > > > > [...] > > > > <input type="submit" validate="no" /> > > > > I'm not fussed about the exact name/usage of the attribute, but it seems > > like a common enough case to warrant a declarative solution rather than > > a script one. > > How would this be achieved using script? > > > One way is to use a button with the following onclick handler: > > for (var i = 0; i < form.elements.length; i++) { > var element = form.elements[i]; > if (!element.validity.valid) { > element.type = 'text'; > element.required = false; > element.maxLength = -1; > element.setCustomValidity(null); > } > } > form.submit(); > > Is there a more elegant solution? Attach a handler for the 'invalid' event on the form to cancel them all and call setCustomValidity(null) on the event.target? (eventually using a second form, specific to the non-validating submit buttons so that you don't have to attach/detach the handler depending on the clicked button; or maybe you could just, in the 'click' event of the submit button, attach the 'invalid' event handler, call form.submit() and then detach the handler?) <form action="..." id="validating"></form> <form action="..." id="non-validating"></form> ... <input type="submit" form="non-validating"> ... <script type="text/javascript"> document.getElementById("non-validating").addEventListener('invalid', function(e) { e.preventDefault(); e.stopPropagation(); e.target.setCustomValidity(''); }, false); </script> ? or ? <form action="..."> ... <input type="submit" id="non-validating"> ... <script type="text/javascript"> function cancel_invalid(e) { e.preventDefault(); e.stopPropagation(); e.target.setCustomValidity(''); } document.getElementById("non-validating").addEventListener('click', function(e) { e.form.addEventListener('invalid', cancel_invalid, false); e.form.submit(); e.form.removeEventListener('invalid', cancel_invalid, false); e.preventDefault(); }, false); </script> Just ideas, I don't know if this would work at all... -- Thomas Broyer
Received on Wednesday, 21 March 2007 10:49:32 UTC