11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
La nuit ayant été courte et sans solution, je souhaiterais avoir votre avis.
J'ai un formulaire rien de plus normal

<form id="MyForm" action="#" onsubmit="return false;">
		<label for="zone1">Zone1 :</label>
		<input id="zone1" name="zone1" value="" title="zone1" type="text"  size="55"  maxlength="50" class="Validate" />	
		<span class="error-message"></span>	
		<label for="zone2">Zone2 :</label>
		<input id="zone2" name="zone2" value="" title="zone2" type="text"  size="55"  maxlength="50" class="Validate" />	
		<span class="error-message"></span>	
		<label for="zone3">Zone2 :</label>
		<input id="zone3" name="zone3" value="" title="zone3" type="text"  size="55"  maxlength="50"  />	
		<span class="error-message"></span>	
		<input type="submit" class="submit" name="submit" value="Je valide" id="submit" />
</form>


Côté Script, j'ai une fonction de validation des inputs, détenant la class "Validate", appelée à la perte du blur et à la soumission du formulaire

// validation des zones des formulaires
$("input.Validate").blur(ValidateFormData) ;

function ValidateFormData() {
	// ma fonction de validation des inputs
}


Côté soumission du formulaire

//envoi pour traitement sauvegarde de formulaire qd submit	
$('.submit').click(function(){
	var formParent = $("#"+$(this).attr('id')).parents("form"); // récupération des info du formulaire associé au submit
	var formId = "#"+formParent.attr('id'); // récupération de l'id du formulaire associé au submit	
....
}


et là tout se complique je souhaiterai boucler sur tous les input détenant la class "Validate" afin de leur appliquer la fonction de validation
J'ai essayé


			$(formName +'.Validate').find('input:text').each(function (){
				DataValidate = ValidateFormData;
			)};




			$(formName +'.Validate').find('input[type=text]').each(function (){
				DataValidate = ValidateFormData;
			)};




			$(formName +'.Validate:input').each(function (){
				DataValidate = ValidateFormData;
			)};


et d'autres variantes

Mais rien ne fonctionne, je ne passe pas dans le each... A priori il ne me ramène aucun input.
Modifié par Babali (03 Aug 2012 - 18:43)
Salut,

J'ai bien l'impression que ta notation $(formName +'.Validate') cherche "le formulaire éyant pour name formName et pour class 'Validate'). Or ton html montre un <form> sans class.

Je pense que le problème vient de là. Essaye avec :


//envoi pour traitement sauvegarde de formulaire qd submit	
$('.submit').click(function(){
        // récupération des info du formulaire associé au submit
	var formParent = $("#"+$(this).attr('id')).parents("form"); 
        //Recherche des inputs de type text dans ce formulaire
	var aInputs = $(formParent).find('input[type=text]');
        $.each( aInputs , function( iKey, elElement) {
              //Appel méthode call de l'objet Function pour assurer un scope valide
              //L'utilisation de 'this' dans ValidateFormData pointera sur le bon élément
              ValidateFormData.call( elElement );
              //@see  http://www.coursweb.ch/javascript/apply-call.html
 
        });
}
Bonjour,
Je fais que passer pour te dire qu'à certains endroits tu te compliques la vie...
var formParent = $("#"+$(this).attr('id')).parents("form");
var formId = "#"+formParent.attr('id');
peut s'écrire
var formParent = $(this)[0].form;
var formId = formParent.id;
Et ensuite, pour la boucle :
$('.validate', formParent).each(function() {
  // ton traitement
});
Ca veut dire "Sélectionne les éléments de classe "validate" inclus dans formParent".
Modifié par Gothor (02 Aug 2012 - 10:48)