Hay algunas cosas que debes tener en cuenta.
1. Hay varias formas de enviar un formulario
- usando el botón de enviar
- presionando enter
- activando un evento de envío en JavaScript
- posiblemente más dependiendo del dispositivo o dispositivo futuro.
Por lo tanto, debemos vincularnos al evento de envío del formulario , no al evento de clic del botón. Esto garantizará que nuestro código funcione en todos los dispositivos y tecnologías de asistencia ahora y en el futuro.
2. Hijax
Es posible que el usuario no tenga habilitado JavaScript. Un patrón de hijax es bueno aquí, donde tomamos suavemente el control del formulario usando JavaScript, pero lo dejamos enviable si JavaScript falla.
Deberíamos extraer la URL y el método del formulario, por lo que si el HTML cambia, no necesitamos actualizar el JavaScript.
3. JavaScript discreto
Usar event.preventDefault () en lugar de return false es una buena práctica, ya que permite que el evento burbujee. Esto permite que otros scripts se vinculen con el evento, por ejemplo, scripts de análisis que pueden estar monitoreando las interacciones del usuario.
Velocidad
Idealmente deberíamos usar un script externo, en lugar de insertar nuestro script en línea. Podemos vincularnos a esto en la sección de encabezado de la página usando una etiqueta de script, o vincularlo en la parte inferior de la página para mayor velocidad. El script debería mejorar silenciosamente la experiencia del usuario, no interferir.
Código
Suponiendo que está de acuerdo con todo lo anterior, y desea capturar el evento de envío y manejarlo a través de AJAX (un patrón hijax), podría hacer algo como esto:
$(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...
});
});
});
Puede activar manualmente el envío de un formulario cuando lo desee a través de JavaScript utilizando algo como:
$(function() {
$('form.my_form').trigger('submit');
});
Editar:
Recientemente tuve que hacer esto y terminé escribiendo un complemento.
(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)
Agregue un atributo data-autosubmit a su etiqueta de formulario y luego puede hacer esto:
HTML
<form action="/blah" method="post" data-autosubmit>
<!-- Form goes here -->
</form>
JS
$(function() {
$('form[data-autosubmit]').autosubmit();
});