Comment éviter que la page ne s'actualise en appuyant sur le bouton d'envoi sans aucune donnée dans les champs?
La validation fonctionne correctement, tous les champs deviennent rouges mais la page est immédiatement actualisée. Ma connaissance de JS est relativement basique.
En particulier, je pense que la processForm()
fonction en bas est «mauvaise».
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
la source
la source
var form = document.getElementById("myForm"); function handleForm(event) { event.preventDefault(); } form.addEventListener('submit', handleForm);
Et je n'ai aucune idée de comment formater un commentaire correctement, semble-t-il.event.preventDefault();
dans votre formulaire le code de traitement de soumission. Une variante à une ligne de ce que j'ai mis dans mon autre commentaire (fondamentalement la même que la version jQuery) serait:document.getElementById("prospects_form").addEventListener('submit', function(event){event.preventDefault();});
Il peut y avoir un moyen de raccourcir cela (en n'utilisant pasaddEventListener()
, mais il semble que ces façons de faire les choses soient généralement désapprouvées sur.Ajoutez ce code onsubmit = "return false":
Cela a réglé le problème pour moi. Il exécutera toujours la fonction onClick que vous spécifiez
la source
Remplacez le type de bouton par
button
:la source
button type="submit"
a soumis le formulaire sur l'action de bouton en utilisant jQuery.Vous pouvez utiliser ce code pour soumettre un formulaire sans actualisation de la page. J'ai fait cela dans mon projet.
la source
Un excellent moyen d'éviter de recharger la page lors de la soumission à l'aide d'un formulaire consiste à ajouter
return false
votre attribut onsubmit.la source
action='#'
action="#"
car cela ne fonctionne pas et n'est pas une solution appropriée. La clé est en faitonsubmit="yourJsFunction();return false"
Ce problème devient plus complexe lorsque vous donnez à l'utilisateur 2 possibilités pour soumettre le formulaire:
Dans un tel cas, vous aurez besoin d'une fonction qui détecte la touche enfoncée dans laquelle vous soumettez le formulaire si la touche Entrée a été appuyée.
Et maintenant vient le problème avec IE (en tout cas la version 11) Remarque: Ce problème n'existe pas avec Chrome ni avec FireFox!
Même si la solution semble triviale, il m'a fallu de nombreuses heures pour résoudre ce problème, j'espère donc que cela pourrait être utile pour d'autres personnes. Cette solution a été testée avec succès, entre autres, sur IE (v 11.0.9600.18426), FF (v 40.03) et Chrome (v 53.02785.143 m 64 bits)
Le code source HTML & js se trouve dans l'extrait. Le principe y est décrit. Avertissement:
Si vous rencontrez ce problème, copiez / collez simplement le code js dans votre environnement et adaptez-le à votre contexte.
la source
En Javascript pur, utilisez:
e.preventDefault()
e.preventDefault()
est utilisé dans jquery mais fonctionne en javascript.la source
La plupart des gens empêcheraient la soumission du formulaire en appelant la
event.preventDefault()
fonction.Un autre moyen est de supprimer l'attribut onclick du bouton et obtenir le code en
processForm()
dehors en.submit(function() {
tant quereturn false;
cause la forme de ne pas se soumettre. De plus, faites en sorte que lesformBlaSubmit()
fonctions renvoient une valeur booléenne en fonction de la validité, à utiliser dansprocessForm();
katsh
La réponse est la même, juste plus facile à digérer.(Au fait, je suis nouveau dans stackoverflow, donnez-moi des conseils s'il vous plaît.)
la source
return false;
empêche également l'événement de bouillonner dans le DOM - c'est un raccourci pourevent.preventDefault(); event.stopPropagation();
La meilleure solution est lors de la soumission d'appeler n'importe quelle fonction et de renvoyer false après.
la source
Personnellement, j'aime valider le formulaire lors de l'envoi et s'il y a des erreurs, il suffit de renvoyer false.
http://jsfiddle.net/dfyXY/
la source
la source
Si vous souhaitez utiliser Pure Javascript, l'extrait de code suivant sera meilleur que toute autre chose.
Supposons :
HTML :
J'espère que cela fonctionne pour vous !!
la source
Je n'ai pas vérifié comment cela fonctionne. Vous pouvez également lier (this) pour qu'il fonctionne comme jquery ajaxForm
utilisez-le comme:
il renvoie des nœuds afin que vous puissiez faire quelque chose comme soumettre i l'exemple ci-dessus
si loin de la perfection mais cela suppose que cela fonctionne, vous devez ajouter la gestion des erreurs ou supprimer la condition de désactivation
la source
Utilisez simplement "javascript:" dans votre attribut action du formulaire si vous n'utilisez pas d'action.
la source
Parfois, e.preventDefault ();fonctionne alors les développeurs sont heureux mais parfois ne fonctionnent pas alors les développeurs sont tristes alors j'ai trouvé une solution pourquoi parfois pas
le premier code fonctionne parfois
deuxième option pourquoi ne pas travailler? Cela ne fonctionne pas car jquery ou une autre bibliothèque javascript ne se charge pas correctement, vous pouvez vérifier dans la console que tous les fichiers jquery et javascript sont chargés correctement ou non.
Cela résout mon problème. J'espère que cela vous sera utile.
la source
À mon avis, la plupart des réponses tentent de résoudre le problème posé sur votre question, mais je ne pense pas que ce soit la meilleure approche pour votre scénario.
A
.preventDefault()
ne rafraîchit en effet pas la page. Mais je pense qu'un simplerequire
sur les champs que vous souhaitez remplir de données, résoudrait votre problème.Notez la
require
balise ajoutée à la fin de chacuninput
. Le résultat sera le même: ne pas actualiser la page sans aucune donnée dans les champs.la source
J'espère que ce sera la dernière réponse