vérification et validation externes de 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 : vérification et validation externes de formulaire

par Ryle » 30 mars 2009, 12:03

Tu n'aurais pas une erreur javascript dans le traitement ?

La seule raison que je puisse trouver au fait qu'il exécute ton alerte dans la boucle et pas celle en sortie, c'est qu'il y a eu une erreur et une interruption du traitement js entre les deux....

par Invité » 28 mars 2009, 16:05

merci pour vos réponses.
J'ai fini par réussir à créer un code qui prend tous les fomulaires de la page et les valide 1 à 1 avec la fonction checkSubmit.
	var allForms = document.forms;
	frm_errors = new Array();
	//on passe dans tous les formulaires pour valider et on enregistre le résultat du test pour chaque form
	for (x in allForms)
	{
		
		var test = allForms[x].name.split('_');   //on vérifie si c'est bien un formulaire concerné par l'opération de validation
		if (test[0] == 'formulaire')
		{
			var validation  = CheckSubmit(allForms[x]);
			if (validation == false) 
			{ 
				frm_errors.push(validation);				
			} 
		}
	}
	//on affiche le nb d'erreurs enregistrées
	alert(frm_errors.length);

ça fonctionne est tous mes formulaires ciblés sont bien validés.
Mon problème est que la dernière ligne
//on affiche le nb d'erreurs enregistrées
alert(frm_errors.length);
Ne me renvoie rien, alors que j'attends le nombre total d'erreurs (nombre de formulaires qui n'ont pas passé la validation).

Pourtant, si je teste frm_errors.length à l'intérieur de la boucle, je vois bien que ce tableau enregistre les erreurs:
//extrait du code 
			if (validation == false) 
			{ 
				frm_errors.push(validation);
                                                                alert(frm_errors.length); //mon alert fonctionne bien quand je suis dans la boucle!				
			} 


La question: pourquoi j'arrive à obtenir la longueur du tableau frm_errors.length quand je suis dans la boucle, pas quand je suis à l'extérieur de cette boucle?

Merci pour tous ceux qui prennent le temps de lire mes posts, merci pour le coup de main.

par Ryle » 27 mars 2009, 19:52

En effet, la commande javascript submit() pour soumettre un formulaire ne déclenche pas l'événement onsubmit() dudit formulaire (sans doute parce que si c'est toi qui déclenche cette action avec javascript, y a pas besoin de détecter l'événement pour te le signaler, t'es sensé en avoir conscience ;))

Et pour répondre à ta question, pourquoi faire un else ? seul le résultat "vrai" t'intéresse :)
document.getElementById("test").onclick = function () 
{ 
      if (CheckSubmit()) 
      { 
              document.forms['myForm'].submit();  
      } 
}
Si ta fonction retourne la valeur true, tu soumets le formulaire, et elle retourne la valeur false, tu ne le fait pas, c'est tout ;)

vérification et validation externes de formulaire

par Invité » 27 mars 2009, 17:16

Bonjour à tous,

J'ai un simple formulaire comme ceci:
<form action="index.php" method="post" name="myForm" onSubmit="return CheckSubmit();">

.....quelques champs ....

<input id="submitForm" type="submit" value="Submit" />
</form>
La fonction CheckSubmit() est une fonction classique javascript qui retourne true/false si les champs du formulaire sont correctement remplis ou pas. Elle fonctionne très bien et renvoie true ou false.

Mon problème:
J'aimerais valider et soumettre ce formulaire à partir d'un autre élément qui n'est pas dans ce formulaire, et qui a un id = "test", comme ceci:
document.getElementById("test").onclick = function ()
{
	document.forms['myForm'].submit(); 
}
Le formulaire est bien soumis, mais je n'ai plus aucun contrôle de validation qui fonctionne, c'est normal.

Ma question: avec mon code, comment faire pour déclencher la fonction de validation CheckSubmit() sans être dans le formulaire et soumettre ce formulaire seulement si la validation s'est bien passée?

J'ai essayé ceci:
document.getElementById("test").onclick = function ()
{
      var validation  = CheckSubmit();
       if (validation == true)
      {
              document.forms['myForm'].submit(); 
      }
      else
      {
          return false;
      }

}

Résultat: la validation fonctionne, je reçois bien les messages les messages d'erreur si le formulaire est mal rempli, mais ce formulaire est soumis quand même...

Comment faire pour éviter la soumission du formulaire quand CheckSubmit renvoie false?
Merci pour vos réponses.