Using HTML5 validation...
In HTML5 browsers, validation occurs before the submit
event. So if the form is invalid, the submit event never fires
$(function() {
$('form').one('submit',function() {
alert(1);
[...]
$(this).submit(); // optional
return false; // returning false skips validator's trigger
});
});
this code will be executed only once, for permanent handling use $.bind
if you want to use the browser default validation you should use the following as you need to bind to the default submit then prevent the it and use $.ajax or $.post
$("form").bind('submit', function(e){
e.preventDefault();
$.post("url",$("form").serialize(),function(data){
$("#result").html(data).show();
});
});
Yes, there is an event for that reason. The event is called invalid when user tries to submit the for orr when you check validity via HTML5 validation method checkValidity(). This event does not fire on blur
or something like that without calling checkValidity()
just because you have HTML validation attributes in your input
tags. But it does fire on before form submit.
From W3C:
When the
checkValidity(
) method is invoked, if the element is a candidate for constraint validation and does not satisfy its constraints, the user agent must fire a simple event namedinvalid
that is cancelable (but in this case has no default action) at the element and return false. Otherwise, it must only return true without doing anything else.
For example you have this markup:
<form>
<input type="text" name="foo" required title="Foo field"/>
<input type="submit"/>
</form>
Then you need to call checkValidity()
to fire invalid
event if the input
data is invalid:
document.querySelectorAll('input')[0].addEventListener('blur', function(){
this.checkValidity();
}, false);
document.querySelectorAll('input')[0].addEventListener('invalid', function(){
console.log('invalid fired');
}, false);
Look at my example here: http://jsbin.com/eluwir/2