He buscado en un montón de páginas, pero no puedo encontrar mi problema, así que tuve que hacer una publicación.
Tengo un formulario que tiene un botón de envío y, cuando lo envíe, NO quiero que se actualice NI redireccione. Solo quiero que jQuery realice una función.
Aquí está el formulario:
<form id="contactForm">
<fieldset>
<label for="Name">Name</label>
<input id="contactName" type="text" />
</fieldset>
<fieldset>
<label for="Email">Email</label>
<input id="contactEmail" type="text" />
</fieldset>
<fieldset class="noHeight">
<textarea id="contactMessage" cols="20"></textarea>
<input id="contactSend" class="submit" type="submit" onclick="sendContactForm()" />
</fieldset>
</form>
<small id="messageSent">Your message has been sent.</small>
Y aquí está el jQuery:
function sendContactForm(){
$("#messageSent").slideDown("slow");
setTimeout('$("#messageSent").slideUp();$("#contactForm").slideUp("slow")', 2000);
}
Lo intenté con y sin un elemento de acción en el formulario, pero no sé qué estoy haciendo mal. Lo que más me ha molestado es que tengo un ejemplo que lo hace a la perfección: Página de ejemplo
Si quieres ver mi problema en vivo, ve a stormink.net (mi sitio) y mira la barra lateral donde dice "Enviarme y enviar un correo electrónico" y "Suscripción RSS". Ambas son formas en las que estoy tratando de que esto funcione.
fuente
false
previenen el envío?Aquí:
En lugar de usar el evento onClick, usará enlazar un controlador de eventos de 'clic' usando jQuery al botón de enviar (o cualquier botón), que tomará submitClick como devolución de llamada. Pasamos el evento a la devolución de llamada para llamar a preventDefault , que es lo que evitará que el clic envíe el formulario.
fuente
$('#contactSend').click(function(e) { submitClick(e) });
o$('#contactSend').click(submitClick);
En la etiqueta de apertura de su formulario, establezca un atributo de acción como este:
fuente
myForm.submit();
lo antes posible, pero luego está cargando la página dos veces.e.preventDefault()
oreturn false
en la función onsubmit. stackoverflow.com/questions/19454310/…Parece que te falta un
return false
.fuente
Si desea ver los errores predeterminados del navegador que se muestran , por ejemplo, los activados por atributos HTML (que aparecen antes de cualquier tratamiento JS de código de cliente):
Debería utilizar el
submit
evento en lugar delclick
evento. En este caso, se mostrará automáticamente una ventana emergente solicitando " Por favor, complete este campo ". Incluso conpreventDefault
:Como alguien mencionó anteriormente ,
return false
detendría la propagación (es decir, si hay más controladores adjuntos al envío del formulario, no se ejecutarán), pero, en este caso, la acción activada por el navegador siempre se ejecutará primero. Incluso con unreturn false
al final.Entonces, si desea deshacerse de estas ventanas emergentes predeterminadas , use el
click
evento en el botón enviar:fuente
Una solución alternativa sería no usar la etiqueta de formulario y manejar el evento de clic en el botón de envío a través de jquery. De esta manera no habrá ninguna actualización de la página, pero al mismo tiempo hay una desventaja de que el botón "Enter" para el envío no funcionará y también en los móviles no obtendrá un botón de ir (un estilo en algunos móviles). Así que apégate al uso de la etiqueta de formulario y usa la respuesta aceptada.
fuente