Il y a quelques éléments à prendre en compte.
1. Il existe plusieurs façons de soumettre un formulaire
- en utilisant le bouton d'envoi
- en appuyant sur la touche Entrée
- en déclenchant un événement de soumission en JavaScript
- éventuellement plus en fonction de l'appareil ou du futur appareil.
Nous devons donc nous lier à la événement de soumission du formulaire et non l'événement de clic du bouton. Cela garantira que notre code fonctionne sur tous les appareils et toutes les technologies d'assistance, maintenant et à l'avenir.
2. Hijax
L'utilisateur n'a peut-être pas activé JavaScript. A hijax est un bon modèle ici, où nous prenons doucement le contrôle du formulaire à l'aide de JavaScript, mais le laissons soumis si JavaScript échoue.
Nous devons tirer l'URL et la méthode du formulaire, de sorte que si le HTML change, nous n'avons pas besoin de mettre à jour le JavaScript.
3. JavaScript discret
Utilisation de event.preventDefault() au lieu de retournez à la case départ est une bonne pratique car elle permet à l'événement de se développer. Cela permet à d'autres scripts de se connecter à l'événement, par exemple les scripts d'analyse qui peuvent surveiller les interactions des utilisateurs.
Vitesse
Nous devrions idéalement utiliser un script externe, plutôt que d'insérer notre script en ligne. Nous pouvons créer un lien vers celui-ci dans la section head de la page à l'aide d'une balise script, ou le lier au bas de la page pour plus de rapidité. Le script doit améliorer discrètement l'expérience de l'utilisateur, et non pas le gêner.
Code
En supposant que vous êtes d'accord avec tout ce qui précède, et que vous voulez attraper l'événement submit, et le traiter via AJAX (un modèle hijax), vous pourriez faire quelque chose comme ceci :
$(function() {
$('form.my_form').submit(function(event) {
event.preventDefault(); // Prevent the form from submitting via the browser
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
});
Vous pouvez déclencher manuellement la soumission d'un formulaire quand vous le souhaitez via JavaScript en utilisant quelque chose comme :
$(function() {
$('form.my_form').trigger('submit');
});
Edit :
J'ai récemment eu à le faire et j'ai fini par écrire un plugin.
(function($) {
$.fn.autosubmit = function() {
this.submit(function(event) {
event.preventDefault();
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
return this;
}
})(jQuery)
Ajoutez un attribut data-autosubmit à votre balise de formulaire et vous pourrez alors faire ceci :
HTML
<form action="/blah" method="post" data-autosubmit>
<!-- Form goes here -->
</form>
JS
$(function() {
$('form[data-autosubmit]').autosubmit();
});