J'ai eu une situation assez complexe, où j'ai besoin de plusieurs boutons de soumission pour traiter des choses différentes. Par exemple, Enregistrer et Supprimer.
La base était qu'il était aussi discret, donc je ne pouvais pas juste faire un bouton normal. Mais il voulait aussi utiliser la validation html5.
Ainsi l'événement submit a été remplacée dans les cas où l'utilisateur a appuyé sur la touche entrée pour déclencher l'prévue par défaut de soumission; dans cet exemple enregistrer.
Ici, ce sont les efforts de la transformation de la forme à continuer à travailler avec/sans javascript et html5 de validation, avec à la fois présenter et cliquez sur événements.
jsFiddle Démo - la validation HTML5 avec soumettre et cliquez sur les substitutions
xHTML
<form>
<input type="text" required="required" value="" placeholder="test" />
<button type="submit" name="save">Save</button>
<button type="submit" name="delete">Delete</button>
</form>
JavaScript
//wrap our script in an annonymous function so that it can not be affected by other scripts and does not interact with other scripts
//ensures jQuery is the only thing declared as $
(function($){
var isValid = null;
var form = $('form');
var submitButton = form.find('button[type="submit"]')
var saveButton = submitButton.filter('[name="save"]');
var deleteButton = submitButton.filter('[name="delete"]');
//submit form behavior
var submitForm = function(e){
console.log('form submit');
//prevent form from submitting valid or invalid
e.preventDefault();
//user clicked and the form was not valid
if(isValid === false){
isValid = null;
return false;
}
//user pressed enter, process as if they clicked save instead
saveButton.trigger('click');
};
//override submit button behavior
var submitClick = function(e){
//Test form validitiy (HTML5) and store it in a global variable so both functions can use it
isValid = form[0].checkValidity();
if(false === isValid){
//allow the browser's default submit event behavior
return true;
}
//prevent default behavior
e.preventDefault();
//additional processing - $.ajax() etc
//.........
alert('Success');
};
//override submit form event
form.submit(submitForm);
//override submit button click event
submitButton.click(submitClick);
})(jQuery);
La mise en garde à l'aide de Javascript, c'est que le navigateur par défaut de onclick doit se propager jusqu'à la soumission de l'événement DOIT se produire afin d'afficher les messages d'erreur sans l'appui de chaque navigateur dans votre code.
Sinon, si l'événement click est remplacée par de l'événement.preventDefault() ou return false il ne sera jamais à se propager vers le navigateur de l'événement submit.
La chose à noter est que dans certains navigateurs ne se déclenche pas à la soumettre le formulaire lorsque l'utilisateur appuie sur entrée, à la place il va déclencher le premier bouton de soumission du formulaire. Il y a donc une console.log ("formulaire de soumission") pour montrer qu'il ne déclenche pas.