¿Cómo evitaría que la página se actualizara al presionar el botón enviar sin ningún dato en los campos?
La validación está configurada funcionando bien, todos los campos se vuelven rojos pero luego la página se actualiza inmediatamente. Mi conocimiento de JS es relativamente básico.
En particular, creo que la processForm()
función en la parte inferior es 'mala'.
HTML
<form id="prospects_form" method="post">
<input id="form_name" tabindex="1" class="boxsize" type="text" name="name" placeholder="Full name*" maxlength="80" value="" />
<input id="form_email" tabindex="2" class="boxsize" type="text" name="email" placeholder="Email*" maxlength="100" value="" />
<input id="form_subject" class="boxsize" type="text" name="subject" placeholder="Subject*" maxlength="50" value="FORM: Row for OUBC" />
<textarea id="form_message" class="boxsize" name="message" placeholder="Message*" tabindex="3" rows="6" cols="5" maxlength="500"></textarea>
<button id="form_send" tabindex="5" class="btn" type="submit" onclick="return processForm()">Send</button>
<div id="form_validation">
<span class="form_captcha_code"></span>
<input id="form_captcha" class="boxsize" type="text" name="form_captcha" placeholder="Enter code" tabindex="4" value="" />
</div>
<div class="clearfix"></div>
</form>
JS
$(document).ready(function() {
// Add active class to inputs
$("#prospects_form .boxsize").focus(function() { $(this).addClass("hasText"); });
$("#form_validation .boxsize").focus(function() { $(this).parent().addClass("hasText"); });
// Remove active class from inputs (if empty)
$("#prospects_form .boxsize").blur(function() { if ( this.value === "") { $(this).removeClass("hasText"); } });
$("#form_validation .boxsize").blur(function() { if ( this.value === "") { $(this).parent().removeClass("hasText"); } });
///////////////////
// START VALIDATION
$("#prospects_form").ready(function() {
// DEFINE GLOBAL VARIABLES
var valName = $('#form_name'),
valEmail = $("#form_email"),
valEmailFormat = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
valMsg = $('#form_message'),
valCaptcha = $('#form_captcha'),
valCaptchaCode = $('.form_captcha_code');
// Generate captcha
function randomgen() {
var rannumber = "";
// Iterate through 1 to 9, 4 times
for(ranNum=1; ranNum<=4; ranNum++){ rannumber+=Math.floor(Math.random()*10).toString(); }
// Apply captcha to element
valCaptchaCode.html(rannumber);
}
randomgen();
// CAPTCHA VALIDATION
valCaptcha.blur(function() {
function formCaptcha() {
if ( valCaptcha.val() == valCaptchaCode.html() ) {
// Incorrect
valCaptcha.parent().addClass("invalid");
return false;
} else {
// Correct
valCaptcha.parent().removeClass("invalid");
return true;
}
}
formCaptcha();
});
// Remove invalid class from captcha if typing
valCaptcha.keypress(function() {
valCaptcha.parent().removeClass("invalid");
});
// EMAIL VALIDATION (BLUR)
valEmail.blur(function() {
function formEmail() {
if (!valEmailFormat.test(valEmail.val()) && valEmail.val() !== "" ) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmail();
});
// Remove invalid class from email if typing
valEmail.keypress(function() {
valEmail.removeClass("invalid");
});
// VALIDATION ON SUBMIT
$('#prospects_form').submit(function() {
console.log('user hit send button');
// EMAIL VALIDATION (SUBMIT)
function formEmailSubmit() {
if (!valEmailFormat.test(valEmail.val())) {
// Incorrect
valEmail.addClass("invalid");
} else {
// Correct
valEmail.removeClass("invalid");
}
}
formEmailSubmit();
// Validate captcha
function formCaptchaSubmit() {
if( valCaptcha.val() === valCaptchaCode.html() ) {
// Captcha is correct
} else {
// Captcha is incorrect
valCaptcha.parent().addClass("invalid");
randomgen();
}
}
formCaptchaSubmit();
// If NAME field is empty
function formNameSubmit() {
if ( valName.val() === "" ) {
// Name is empty
valName.addClass("invalid");
} else {
valName.removeClass("invalid");
}
}
formNameSubmit();
// If MESSAGE field is empty
function formMessageSubmit() {
if ( valMsg.val() === "" ) {
// Name is empty
valMsg.addClass("invalid");
} else {
valMsg.removeClass("invalid");
}
}
formMessageSubmit();
// Submit form (if all good)
function processForm() {
if ( formEmailSubmit() && formCaptchaSubmit() && formNameSubmit() && formMessageSubmit() ) {
$("#prospects_form").attr("action", "/clients/oubc/row-for-oubc-send.php");
$("#form_send").attr("type", "submit");
return true;
} else if( !formEmailSubmit() ) {
valEmail.addClass("invalid");
return false;
} else if ( !formCaptchaSubmit() ) {
valCaptcha.parent().addClass("invalid");
return false;
} else if ( !formNameSubmit() ) {
valName.addClass("invalid");
return false;
} else if ( !formMessageSubmit() ) {
valMsg.addClass("invalid");
return false;
} else {
return false;
}
}
});
});
// END VALIDATION
/////////////////
});
javascript
jquery
html
forms
M_Willett
fuente
fuente
var form = document.getElementById("myForm"); function handleForm(event) { event.preventDefault(); } form.addEventListener('submit', handleForm);
Parece que no tengo idea de cómo formatear un comentario correctamente.event.preventDefault();
en su formulario el código de manejo de envío. Una variante de una línea de lo que puse en mi otro comentario (básicamente lo mismo que la versión jQuery) sería:document.getElementById("prospects_form").addEventListener('submit', function(event){event.preventDefault();});
Puede haber una forma de acortar eso (al no usaraddEventListener()
, pero parece que esas formas de hacer las cosas generalmente están mal vistas) sobre.Agregue este código onsubmit = "return false":
Eso me lo arregló. Seguirá ejecutando la función onClick que especifique
fuente
Reemplace el tipo de botón para
button
:fuente
button type="submit"
haya enviado el formulario sobre la acción del botón usando jQuery.Puede usar este código para enviar formularios sin actualizar la página. He hecho esto en mi proyecto.
fuente
Una excelente manera de evitar volver a cargar la página cuando se envía mediante un formulario es agregando
return false
con su atributo onsubmit.fuente
action='#'
action="#"
porque no funciona y no es una solución adecuada. La clave es en realidadonsubmit="yourJsFunction();return false"
Este problema se vuelve más complejo cuando le da al usuario 2 posibilidades para enviar el formulario:
En tal caso, necesitará una función que detecte la tecla presionada en la que enviará el formulario si se pulsa la tecla Intro.
Y ahora viene el problema con IE (en cualquier caso, la versión 11) Observación: ¡Este problema no existe con Chrome ni con FireFox!
Aunque la solución parece trivial, me llevó muchas horas resolver este problema, por lo que espero que sea útil para otras personas. Esta solución se ha probado con éxito, entre otros, en IE (v 11.0.9600.18426), FF (v 40.03) y Chrome (v 53.02785.143 m 64 bit)
El código fuente HTML & js está en el fragmento. El principio se describe allí. Advertencia:
Si se enfrentó a este problema, simplemente copie / pegue el código js en su entorno y adáptelo a su contexto.
fuente
En Javascript puro, use:
e.preventDefault()
e.preventDefault()
se usa en jquery pero funciona en javascript.fuente
La mayoría de las personas evitarían que el formulario se envíe llamando al
event.preventDefault()
función.Otro medio es eliminar el atributo onclick del botón y obtener el código
processForm()
para.submit(function() {
quereturn false;
el formulario no se envíe. Además, haga que lasformBlaSubmit()
funciones devuelvan un valor booleano basado en la validez, para usar enprocessForm();
katsh
La respuesta es la misma, solo que más fácil de digerir.(Por cierto, soy nuevo en stackoverflow, dame orientación por favor).
fuente
return false;
también se detiene evento desde burbujeando el DOM - es una forma abreviada deevent.preventDefault(); event.stopPropagation();
La mejor solución es enviar una función a cualquier función que desee y devolver false después de ella.
fuente
Personalmente, me gusta validar el formulario al enviarlo y, si hay errores, simplemente devolver falso.
http://jsfiddle.net/dfyXY/
fuente
fuente
Si desea utilizar Javascript puro, el siguiente fragmento será mejor que cualquier otra cosa.
Supongamos :
HTML :
Espero que funcione para ti!
fuente
No comprobé cómo funciona. También puede enlazar (esto) para que funcione como jquery ajaxForm
úsalo como:
devuelve nodos para que pueda hacer algo como enviar el ejemplo anterior
lejos de la perfección pero se supone que funciona, debe agregar el manejo de errores o eliminar la condición de desactivación
fuente
Simplemente use "javascript:" en su atributo de acción de formulario si no está usando action.
fuente
A veces e.preventDefault (); funciona, los desarrolladores están contentos, pero a veces no funcionan, los desarrolladores están tristes y luego encontré una solución por la que a veces no funciona
el primer código a veces funciona
segunda opción ¿por qué no funciona? Esto no funciona porque jquery u otra biblioteca javascript no se carga correctamente, puede verificar en la consola que todos los archivos jquery y javascript se carguen correctamente o no.
Esto resuelve mi problema. Espero que esto te sea útil.
fuente
En mi opinión, la mayoría de las respuestas están tratando de resolver el problema planteado en su pregunta, pero no creo que sea el mejor enfoque para su escenario.
A
.preventDefault()
, de hecho, no actualiza la página. Pero creo que un simplerequire
en los campos que desea rellenar con datos resolvería su problema.Observe la
require
etiqueta agregada al final de cada unoinput
. El resultado será el mismo: no actualizar la página sin ningún dato en los campos.fuente
Espero que esta sea la ultima respuesta