11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je souhaite réaliser une vérification dynamique de mon formulaire. J'ai donc inséré du JS directement dans ma page pour mettre un fond vert et un cadre noir sur les champs corrects et un fond rouge, un cadre noir et une div qui apparait au-dessus du formulaire, dans le cas ou le champ est incorrect. Le problème est le suivant : Pour afficher les erreurs, je dois valider. Comment faire une vérification dynamique de champs (sans onSubmit()...) ?


Voici mon code :

	<!--  Début du formulaire de contact  -->
	<section class="form">
		<div class="wrapper">
			<section class="page_contact">
				<div class="title">
					<span class="separator"></span>
					<h2>Formulaire de contact</h2>
				</div>
			</section>
			<div id="form-main">
				<div id="form-div">
					<form class="form" id="form1" name="formulaire" onSubmit="return check();" method="post" > <!--action="traitement_formulaire.php"-->
      
						<p class="name">
							<input name="nom" type="text" class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" placeholder="Nom" id="name" />
						</p>
		  
						<p class="email">
							<input name="email" type="text" class="validate[required,custom[email]] feedback-input" id="email" placeholder="Email" />
						</p>
		  
						<p class="message">
							<textarea name="text" class="validate[required,length[6,300]] feedback-input" id="comment" placeholder="Votre message"></textarea>
						</p>
		  
		  
						<div class="submit">
							<input type="submit" value="ENVOYER LE MESSAGE" id="button-blue"/>
							<div class="ease"></div>
						</div>
					</form>
				</div>
			</div>
			<script language="JavaScript">
			//forms
				function check() {
							var msg = "";
			 
			//Vérification du mail s'il n'est pas vide on vérifie le . et @
			 
					if (document.getElementById("email").value != "")	{
					indexAroba = document.getElementById("email").value.indexOf('@');
					indexPoint = document.getElementById("email").value.indexOf('.');
					if ((indexAroba < 0) || (indexPoint < 0))		{
			 
			//dans le cas ou il manque soit le . soit l'@ on modifie la couleur d'arrière plan du champ mail et définissons un message d'alerte
			 
						document.getElementById("email").style.backgroundColor = "#FF4000";
						document.getElementById("email").style.border = "2px solid #000;";
						msg += "Le mail est incorrect\n";
					}
				}
			 
			//Notre champs mail est vide donc on change la couleur et on défini un autre message d'alerte
			 
				else	{
					document.getElementById("email").style.backgroundColor = "#DF7401";
					msg += "Veuillez saisir votre mail.\n";
				}
			 
			//ici nous vérifions si le champs nom et vide, changeons la couleur du champs et définissons un message d'alerte
			if (document.getElementById("name").value == "")	{
					msg += "Veuillez saisir votre nom\n";
					document.getElementById("name").style.backgroundColor = "#DF7401";
				}
			else {
				document.getElementById("email").style.backgroundColor = "#39cf85";
			}
			 
			//meme manipulation pour le champ commentaire 
			if (document.getElementById("comment").value == "")	{
					msg += "Veuillez saisir votre message\n";
					document.formulaire.message.style.backgroundColor = "#FF4000";
				}
			 
			//Si aucun message d'alerte a été initialisé on retourne TRUE
				if (msg == "") return(true);
			 
			//Si un message d'alerte a été initialisé on lance l'alerte
				else	{
					alert(msg);
					return(false);
				}
			}
			</script>
	</section><!--  Fin du formulaire  -->

Modifié par Kodeur (13 Jan 2017 - 15:10)
Kodeur a écrit :
Bonjour,

Je souhaite réaliser une vérification dynamique de mon formulaire. J'ai donc inséré du JS directement dans ma page pour mettre un fond vert et un cadre noir sur les champs corrects et un fond rouge, un cadre noir et une div qui apparait au-dessus du formulaire, dans le cas ou le champ est incorrect. Le problème est le suivant : Pour afficher les erreurs, je dois valider. Comment faire une vérification dynamique de champs (sans onSubmit()...) ?


Voici mon code :

	&lt;!--  Début du formulaire de contact  --&gt;
	&lt;section class="form"&gt;
		&lt;div class="wrapper"&gt;
			&lt;section class="page_contact"&gt;
				&lt;div class="title"&gt;
					&lt;span class="separator"&gt;&lt;/span&gt;
					&lt;h2&gt;Formulaire de contact&lt;/h2&gt;
				&lt;/div&gt;
			&lt;/section&gt;
			&lt;div id="form-main"&gt;
				&lt;div id="form-div"&gt;
					&lt;form class="form" id="form1" name="formulaire" onSubmit="return check();" method="post" &gt; &lt;!--action="traitement_formulaire.php"--&gt;
      
						&lt;p class="name"&gt;
							&lt;input name="nom" type="text" class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" placeholder="Nom" id="name" /&gt;
						&lt;/p&gt;
		  
						&lt;p class="email"&gt;
							&lt;input name="email" type="text" class="validate[required,custom[email]] feedback-input" id="email" placeholder="Email" /&gt;
						&lt;/p&gt;
		  
						&lt;p class="message"&gt;
							&lt;textarea name="text" class="validate[required,length[6,300]] feedback-input" id="comment" placeholder="Votre message"&gt;&lt;/textarea&gt;
						&lt;/p&gt;
		  
		  
						&lt;div class="submit"&gt;
							&lt;input type="submit" value="ENVOYER LE MESSAGE" id="button-blue"/&gt;
							&lt;div class="ease"&gt;&lt;/div&gt;
						&lt;/div&gt;
					&lt;/form&gt;
				&lt;/div&gt;
			&lt;/div&gt;
			&lt;script language="JavaScript"&gt;
			//forms
				function check() {
							var msg = "";
			 
			//Vérification du mail s'il n'est pas vide on vérifie le . et @
			 
					if (document.getElementById("email").value != "")	{
					indexAroba = document.getElementById("email").value.indexOf('@');
					indexPoint = document.getElementById("email").value.indexOf('.');
					if ((indexAroba &lt; 0) || (indexPoint &lt; 0))		{
			 
			//dans le cas ou il manque soit le . soit l'@ on modifie la couleur d'arrière plan du champ mail et définissons un message d'alerte
			 
						document.getElementById("email").style.backgroundColor = "#FF4000";
						document.getElementById("email").style.border = "2px solid #000;";
						msg += "Le mail est incorrect\n";
					}
				}
			 
			//Notre champs mail est vide donc on change la couleur et on défini un autre message d'alerte
			 
				else	{
					document.getElementById("email").style.backgroundColor = "#DF7401";
					msg += "Veuillez saisir votre mail.\n";
				}
			 
			//ici nous vérifions si le champs nom et vide, changeons la couleur du champs et définissons un message d'alerte
			if (document.getElementById("name").value == "")	{
					msg += "Veuillez saisir votre nom\n";
					document.getElementById("name").style.backgroundColor = "#DF7401";
				}
			else {
				document.getElementById("email").style.backgroundColor = "#39cf85";
			}
			 
			//meme manipulation pour le champ commentaire 
			if (document.getElementById("comment").value == "")	{
					msg += "Veuillez saisir votre message\n";
					document.formulaire.message.style.backgroundColor = "#FF4000";
				}
			 
			//Si aucun message d'alerte a été initialisé on retourne TRUE
				if (msg == "") return(true);
			 
			//Si un message d'alerte a été initialisé on lance l'alerte
				else	{
					alert(msg);
					return(false);
				}
			}
			&lt;/script&gt;
	&lt;/section&gt;&lt;!--  Fin du formulaire  --&gt;

De mémoire, si tu places le test sur l'événement onblur (perte de focalisation clavier) cela devrait fonctionner.
Merci sepecat pour ta réponse. Je viens d'essayer, mais cela n'a pas l'air de fonctionner terrible... Par ailleurs, avec le "onSubmit()", les champs incorrects deviennent oranges (sauf le bloc "textarea") quelques quarts de secondes et la page se recharge en réinitialisant le contenu des champ...
salut,
tu peux essayer l'évènement change qui se déclenche après modification d'un élément. Tu peux aussi passer par keypress ou keyup (selon ton besoin) pour exécuter ta fonction de vérification dès que l'utilisateur appuie sur une touche (à noter qu'il y a une subtile différence entre les deux évènements cités plus haut).
C'est bon ça marche. Voici le formulaire :

<form class="form" id="form1" name="formulaire"  > <!-- onsubmit="check();" method="post" action="traitement_formulaire.php"-->
      
						<p class="name">
							<span id="name-error" class="erreur">Veuillez saisir votre nom</span>
							<input name="nom" type="text" onblur="check_nom()" class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" placeholder="Nom" id="name" />
						</p>
		  
						<p class="email">
							<span id="email-error" class="erreur">Le mail est incorrect</span>
							<input name="email" onblur="check_mail()" type="text" class="validate[required,custom[email]] feedback-input" id="email" placeholder="Email" />							
						</p>
		  
						<p class="message">
							<span id="comment-error" class="erreur">Veuillez saisir votre message</span>
							<textarea name="text" onblur="check_comment()" class="validate[required,length[6,300]] feedback-input" id="comment" placeholder="Votre message"></textarea>							
						</p>
		  
		  
						<div class="submit">
							<input type="submit" value="ENVOYER LE MESSAGE" id="button-blue"/>
							<div class="ease"></div>
						</div>
					</form>



et le code javascript associé :

			<script language="JavaScript">
			
			function check_nom() {
				var msg = "";
			 
				//Vérification du champ nom
			 
				if (document.getElementById("name").value == "")	{
					
					msg += "Veuillez saisir votre nom\n";
					document.getElementById("name").style.backgroundColor = "#f34949";
				}
				else {
					document.getElementById("name").style.backgroundColor = "#39cf85";
				}
				//Si aucun message d'alerte a été initialisé on retourne TRUE
				if (msg == "") return(true);
			 
				//Si un message d'alerte a été initialisé on lance l'alerte
				else	{
					document.getElementById("name-error").style.display = 'block';
					return(false);
				}
			}
			
			function check_mail() {
				var msg = "";
			 
			//Vérification du mail s'il n'est pas vide on vérifie le . et @
			 
				if (document.getElementById("email").value != "" && document.getElementById("email").value.length < 5)	{
					
					indexAroba = document.getElementById("email").value.indexOf('@');
					indexPoint = document.getElementById("email").value.indexOf('.');
					
					if ((indexAroba < 0) || (indexPoint < 0))		{
			 
					//dans le cas ou pas de . ni d'@ modification couleur arrière plan du champ mail et un message d'alerte
			 
						document.getElementById("email").style.backgroundColor = "#f34949";
						msg += "Le mail est incorrect\n";
						
						/*var divs = document.getElementsByTagName('onblur');
						for(var i=0; i<divs.length; i++){
							if(divs[i].className == "feedback-input"){
								divs[i].style.border = "#000 solid 4px;";
							}
						}*/						
					}
					else {
						document.getElementById("email").style.backgroundColor = "#39cf85";
						msg = "";
					}
				}
				else {
						document.getElementById("email").style.backgroundColor = "#f34949";
						msg += "Le mail est incorrect\n";
				}
				//Si aucun message d'alerte a été initialisé on retourne TRUE
				if (msg == "") return(true);
			 
				//Si un message d'alerte a été initialisé on lance l'alerte
				else	{
					document.getElementById("email-error").style.display = 'block';
					return(false);
				}
			}
			
			function check_comment() {
				var msg = "";
			 
				//Vérification du champ commentaire
			 
				if (document.getElementById("comment").value == "")	{
					
					msg += "Veuillez saisir votre message\n";
					document.getElementById("comment").style.backgroundColor = "#f34949";
				}
				else {
					document.getElementById("comment").style.backgroundColor = "#39cf85";
				}
				//Si aucun message d'alerte a été initialisé on retourne TRUE
				if (msg == "") return(true);
			 
				//Si un message d'alerte a été initialisé on lance l'alerte
				else	{
					document.getElementById("comment-error").style.display = 'block';
					return(false);
				}
			}
			</script>


J'ai utilisé l'évènement onblur (merci sepecat). J'ai juste un soucis avec la condition "document.getElementById("email").value.length < 5" qui n'a pas l'air de fonctionner.

Par ailleurs, comment empêcher la validation du formulaire tant que les champs ne sont pas corrects ?

@ +[/i][/i]