Ci sono alcune cose che devi tenere a mente.
1. Esistono diversi modi per inviare un modulo
- utilizzando il pulsante di invio
- premendo invio
- attivando un evento di invio in JavaScript
- forse più a seconda del dispositivo o del dispositivo futuro.
Dovremmo quindi legarci all'evento di invio del modulo , non all'evento clic sul pulsante. Ciò garantirà che il nostro codice funzioni su tutti i dispositivi e le tecnologie di assistenza ora e in futuro.
2. Hijax
È possibile che JavaScript non sia abilitato per l'utente. Un hijax modello è buono qui, dove prendiamo delicatamente il controllo del modulo utilizzando JavaScript, ma lo lasciamo sottomettibile se JavaScript non riesce.
Dovremmo estrarre l'URL e il metodo dal modulo, quindi se l'HTML cambia, non è necessario aggiornare JavaScript.
3. JavaScript discreto
L'uso di event.preventDefault () invece di return false è una buona pratica in quanto consente all'evento di fare il bubble up. Ciò consente ad altri script di collegarsi all'evento, ad esempio script di analisi che potrebbero monitorare le interazioni dell'utente.
Velocità
Idealmente dovremmo utilizzare uno script esterno, anziché inserire il nostro script in linea. Possiamo collegarci a questo nella sezione head della pagina usando un tag script, o collegarlo ad esso nella parte inferiore della pagina per la velocità. Lo script dovrebbe migliorare silenziosamente l'esperienza dell'utente, non interferire.
Codice
Supponendo che tu sia d'accordo con tutto quanto sopra e desideri catturare l'evento di invio e gestirlo tramite AJAX (un modello hijax), potresti fare qualcosa del genere:
$(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...
});
});
});
Puoi attivare manualmente l'invio di un modulo ogni volta che vuoi tramite JavaScript usando qualcosa come:
$(function() {
$('form.my_form').trigger('submit');
});
Modificare:
Di recente ho dovuto farlo e ho finito per scrivere 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)
Aggiungi un attributo data-autosubmit al tuo tag del modulo e puoi farlo:
HTML
<form action="/blah" method="post" data-autosubmit>
<!-- Form goes here -->
</form>
JS
$(function() {
$('form[data-autosubmit]').autosubmit();
});