Alert javascript sur formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Alert javascript sur formulaire

Re: Alert javascript sur formulaire

par AB » 24 janv. 2011, 17:37

Voilà un exemple de contrôle de différents champs (à tester dans un page séparée) :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
<script type="text/javascript">
<!--
function Trim (myString)
{//supprime les espaces vides en début et en fin de chaine
	return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
}
 
 
 
function Verif_valide(id_input, regex)
{
	var champ;
	var etat = true;
	
	if (champ = document.getElementById(id_input))
		{
			var id_span = champ.name+'_valide';//id du span = nom du champ concaténé à _valide
			var span;	
			
			// Si le span associé existe on fait le contrôle
			if(span = document.getElementById(id_span))	
				{
					// Test le regex ou si le champ est vide
					if ((regex.test(champ.value)) || Trim (champ.value) == '') 
						{
							span.style.display = 'none';
						}
						else 
						{
							span.style.display = 'inline';
							etat = false;
						}
				}
		}
	return etat; 
}
			
 
 
function Verif_egal(id_input1, id_input2)
{
	var champ1;
	var champ2;
	
	var etat = true;
	
	if (champ1 = document.getElementById(id_input1))
		{
			var id_span = champ1.name+'_egal';//id du span = nom du champ concaténé à _egal
			var span;	
			
			if(champ2 = document.getElementById(id_input2))
				{
					// Si le span associé existe on fait le contrôle
					if(span = document.getElementById(id_span))	
						{
							// Test l'egalité des deux champ
							if (champ1.value == champ2.value  || Trim (champ1.value) == '' || Trim (champ2.value) == '') 
								{
									span.style.display = 'none';
								}
								else 
								{
									span.style.display = 'inline';
									etat = false;
								}
						}
				}
		}
	return etat; 
}
 
 
 
function Verif_checked(bloc)
{
	var bloc_controle;
	
    var etat = true;
	
	 // Sélection du bloc contenant les champs à contrôler
	if(bloc_controle = document.getElementById(bloc))
		{
			//Initialisation d'une variable pour contenir un tableau.
			var tab = new Array();
			var no_check = new Array();	  
			 
			// Cherche les balises "input" inlues dans le bloc
			tab = bloc_controle.getElementsByTagName('input');
	   
	   	   	var nb_tableau = tab.length;
			
			// Liste les éléments du tableau
			for (i=0; i < nb_tableau; i++)        
				{
					var id_span = tab[i].name+'_check';//id du span = nom du champ concaténé à _vide
					
					// Si le span associé existe on fait le contrôle
					if(span = document.getElementById(id_span))	
					{	
						if(tab[i].checked != true) 
							{
							// Si l'élément n'est pas coché on ajoute un élément au tableau des éléments non cochés
								no_check.push("1");
							}
					}			
				}
			
			// Si les deux tableaux ont le même nombre d'éléments (aucun élément n'a été coché)
			if(no_check.length == tab.length) 
				{
					span.style.display = 'inline';	
					etat = false;
				}
				else
				{
				    // normalement non indispensable (juste pour symétrie avec les autres fonctions) 
					span.style.display = 'none';	
				}						  
		}
		
	return etat; 	
}
 
 
 
function Verif_texte_vide(bloc,type_champ)
{		
				 
	var bloc_controle;
 	var etat = true;
  
	 // Sélection du bloc contenant les champs à contrôler
	if(bloc_controle = document.getElementById(bloc))
		{
			//Initialisation d'une variable pour contenir un tableau.
			var tab = new Array();
	   
			// Cherche les balises "type_champ" inlues dans le bloc ("formulaire1" ou "form_text" dans l'exemple) 
			tab = bloc_controle.getElementsByTagName(type_champ);
	   
	   	   	var nb_tableau = tab.length;
			
			var span;
			
			// Liste les éléments du tableau
			for (i=0; i < nb_tableau; i++)        
				{
					var id_span = tab[i].name+'_vide';//id du span = nom du champ concaténé à _vide
					
					// Si le span associé existe on fait le contrôle
					if(span = document.getElementById(id_span))	
					{	
						if(Trim(tab[i].value) == "") 
							{
								span.style.display = 'inline';
								etat = false;
							}
							else
							{
								span.style.display = 'none';
							}
					}			
				}
	
		}
		
	return etat; 									  
 
}
 
 
 
function Controle_form ()
{
	var etat = true;
	
	// ici tu défini les bloc à contrôler (champs qui ne doivent pas être vides) avec le type de champs associés en les passant en paramètres à la fonction Verif_texte_vide
	if (!Verif_texte_vide('form_input','input')) etat = false;
	
	// ces contrôles spécifiques doivent être placés après la fonction Verif_texte_vide puisqu'ils vérifient la qualité du champ. On passe à la fonction Verif_valide l'id du champ et le regex de contrôle
	
	var regex_tel = /^0[1-9]([_.\-\s]*[0-9]{2}){4}$/;
	if (!Verif_valide('numero',regex_tel)) etat = false;
 
	
	var regex_mail = /^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3}$/;
	if (!Verif_valide('mail',regex_mail)) etat = false;
 
	// Necessite un id identique au nom du champ
	if (!Verif_egal('confirmation','pass')) etat = false;
	
	
	if (!Verif_checked('radio_check')) etat = false;
		
	return etat;
}
-->
</script>
<style type="text/css">
<!--
#form_input span, #radio_check span {
display:none;
}
-->
</style>
</head>
 
<body>
<div class="form-container">

<form name="formulaire" method="POST" action="#" onsubmit="return Controle_form();">
<fieldset>
<div id = "radio_check">
<input name="MR" value="Mr" type="radio" />Mr
<input name="MR" value="Mme" type="radio" />Mme
<span id = "MR_check" class="important">&nbsp;Un bouton doit être choisi</span>
</div>
<div id = "form_input">
<label for="nom"><font color="#FF0000"> *</font>Votre nom :</label><p>
<input id="nom" name="nom" size="50" maxlength="100" type="text" class="error" value="" />
<span id = "nom_vide" class="important">&nbsp;Le champ NOM doit être rempli</span></p>
<p>&nbsp;</p>
<label for="prenom"><font color="#FF0000"> *</font>Votre prénom :</label>
<p>
<input id="prenom" name="prenom" size="50" maxlength="100" type="text" class="error" value="" />
<span id = "prenom_vide" class="important">&nbsp;Le champ PRENOM doit être rempli</span></p>
<p>&nbsp;</p>
 
<label for="mail"><font color="#FF0000"> *</font>Votre adresse mail :</label>
<p>
<input name="mail" id="mail" size="50" maxlength="100" type="text" class="error" value="" />
<span id = "mail_vide" class="important">&nbsp;Le champ MAIL doit être rempli</span><span id = "mail_valide" class="important">&nbsp;Le champ MAIL est invalide</span></p>
<p>&nbsp;</p>
 
<label for="numero"><font color="#FF0000"> *</font>Votre numéro de
téléphone :</label>
<p>
<input name="numero" id="numero" size="15" maxlength="15" type="text" class="error" value=""/>
<span id = "numero_vide" class="important">&nbsp;Le champ TELEPHONE doit être rempli</span><span id = "numero_valide" class="important">&nbsp;Le champ TELEPHONE est invalide</span></p>
<p>&nbsp;</p>
 
<label for="pass"><font color="#FF0000"> *</font>Password :</label>
<p>
<input type="password" name="pass" id="pass" value="" class="error" />
<span id = "pass_vide" class="important">&nbsp;Le champ PASSWORD doit être rempli</span></p>
 
<p>&nbsp;</p>
<label for="confirmation"><font color="#FF0000"> *</font>Confirmation password :</label>
<p>
<input type="password" name="confirmation" id="confirmation" value="" class="error" />
<span id = "confirmation_vide" class="important">&nbsp;Le champ CONFIRMATION doit être rempli</span><span id = "confirmation_egal" class="important">&nbsp;Le champ CONFIRMATION n'est pas identique au champ PASSWORD</span></p>
</div>
</fieldset>
<input type="submit"  value="Enregistrement"/>
</form>
</div>
</body>
</html>

Re: Alert javascript sur formulaire

par marl » 24 janv. 2011, 10:58

Merci pour vos réponses!!!

Par contre je ne connais pas grand chose au langage javascript. Quelle fonction dois-je utiliser et comment faire un appel de cette fonction. Et t'il possible de faire un appel avec une alerte de mes spry widgets?

Re: Alert javascript sur formulaire

par devlop78 » 24 janv. 2011, 02:21

ça me parait bizarre de mettre ainsi une alerte directement dans l'évènement onclick.

J'y mettrais plutôt un appel vers une fonction Javascript, qui vérifiera alors l'intégrité du formulaire, affichera l'alerte si besoin, et procédera à l'envoi des données ou pas.

La réponse est dite.

Re: Alert javascript sur formulaire

par Berzemus » 23 janv. 2011, 19:10

ça me parait bizarre de mettre ainsi une alerte directement dans l'évènement onclick.

J'y mettrais plutôt un appel vers une fonction Javascript, qui vérifiera alors l'intégrité du formulaire, affichera l'alerte si besoin, et procédera à l'envoi des données ou pas.

Alert javascript sur formulaire

par marl » 23 janv. 2011, 14:48

Bonjour à tous!!!

Je souhaite ajouter une alerte javascript à l'envoi de mon formulaire au cas où des champs serait manquant.

Pour la vérification de mes champs, j'utilise des spry widgets. Je vous mets un exemple:

Partie formulaire =

Code : Tout sélectionner

<span id="sprytextfield2"> <input name="prenom" type="text" class="champ-style2" id="prenom" value="" size="25" /> <span class="textfieldRequiredMsg">Une valeur est requise.</span></span></td>
Script java =

Code : Tout sélectionner

var sprytextfield2 = new Spry.Widget.ValidationTextField("sprytextfield2");
Voici donc le code de mon alerte lors de l'envoi du formulaire :

Code : Tout sélectionner

<input name="valider" onclick="alert(this.value)" type="image" src="../../validation.png" class="boite" id="valider" value="Certains champs sont manquants ou incomplets!" action=""/>
Mon problème est que cette alerte s'affiche à chaque envoi, même lorsque le formulaire est valide et envoyé.

Auriez-vous une solution?

Merci d'avance pour vos réponses!!!