Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire Cours JavaScript, FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 01/07/2009, 15h17   #1 (permalink)
Expert Confirmé Sénior
 
Avatar de Erwan31
 
Date d'inscription: février 2008
Localisation: Revel
Messages: 2 104
Par défaut Cumuler plusieurs identifiants

Bonjour,
j'aimerais ajouter un id à Email (puisqu'il y a un autre champs sur lequel je dois appliquer la condition) mais les syntaxes ['Email, EmailCtc'] ou ['Email','EmailCtc'] ne fonctionnent pas. Je suppose que c'est plus compliqué?

Code :
function CheckField(){
 
  if (document.forms['RegisterForm'].elements['Email'].value == '')
	  {
    alert('Adresse email obligatoire !');
    document.forms['RegisterForm'].elements['Email'].focus();
    return false;
  }
 
 
Est ce que la synatxe actuelle vous semble correcte?
Erwan31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 15h29   #2 (permalink)
Modérateur
 
Avatar de gwyohm
 
Date d'inscription: octobre 2007
Localisation: Paris
Messages: 490
Par défaut

Avec cette syntaxe
Code :
document.forms['RegisterForm'].elements['Email']
Email est l'attribut name de ton controle (input, select, ...). Si tu as plusieurs controles qui ont le même nom, tu obtiens un tableau.
Si tu veux passer par l'id,
Code :
document.getElementById(id);
Comme les IDs doivent être uniques, tu n'obtiens bien qu'un élément
__________________
on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 15h49   #3 (permalink)
Expert Confirmé Sénior
 
Avatar de Erwan31
 
Date d'inscription: février 2008
Localisation: Revel
Messages: 2 104
Par défaut

Ok c'est l'attribut name en effet. Est ce que je peux donc factoriser ma condition avec plusieurs name?
Erwan31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 16h00   #4 (permalink)
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Date d'inscription: mars 2002
Localisation: Au coeur de la Nébuleuse de la Rainette
Messages: 22 666
Par défaut

soit tu reste avec les names en sachant que
Code :
document.forms['RegisterForm'].elements['Email']
retourne une collection
Code :
 
document.forms['RegisterForm'].elements['Email'][0]
document.forms['RegisterForm'].elements['Email'][1]
../..
soit tu te rabats sur un nommage rationnel avec des ids
Code :
 
id="Email1"
id="Email2" 
../..
un id de fant être unique sur la page
et tu utilise un petit code fourni dans les contributions
getElement(s)ById
http://www.developpez.net/forums/d75...filtre-regexp/
__________________
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )
Citation:
Deux règles du succès:
1) Ne communiquez jamais à quelqu'un tout votre savoir...

Votre post a trouvé une réponse qui vous satisfait ? Alors n'oubliez pas le Tag

réalisations web (developpeur et/ou infographiste et/ou chef de projet:
www.saftair.com| www.ouestisol.fr | www.sebemex.fr
| www.sistac-alizay.fr | www.planet-languages.com | www.acoustishop.fr | www.litt.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 16h31   #5 (permalink)
Expert Confirmé Sénior
 
Avatar de Erwan31
 
Date d'inscription: février 2008
Localisation: Revel
Messages: 2 104
Par défaut

Merci SpaceFrog.
Avant de poursuivre je précise que je suis un grand débutant du JS et que je ne connais pas grand chose à la syntaxe.
Voila ce que j'ai déclaré mais ça ne fonctionne pas.

Code :
if (
	document.forms['RegisterForm'].elements['Email'][0].value == ''
	document.forms['RegisterForm'].elements['EmailCtc'][1].value == '')
	  {
    alert('Adresse email obligatoire !');
    document.forms['RegisterForm'].elements['Email'].focus();
    document.forms['RegisterForm'].elements['EmailCtc'].focus();
    return false;
  }
 
Erwan31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 16h42   #6 (permalink)
Modérateur
 
Avatar de gwyohm
 
Date d'inscription: octobre 2007
Localisation: Paris
Messages: 490
Par défaut

Code :
if (
	document.forms['RegisterForm'].elements['Email'][0].value == '' ||
	document.forms['RegisterForm'].elements['EmailCtc'][0].value == '')
// Tu n'as qu'un champ EmailCtc, non ?
	  {
    alert('Adresse email obligatoire !');
    document.forms['RegisterForm'].elements['Email'].focus();
    document.forms['RegisterForm'].elements['EmailCtc'].focus();
    // Supprime une des deux lignes au dessus : tu donnes le focus à Email et immédiatement après à EmailCtc
    return false;
  }
__________________
on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 16h48   #7 (permalink)
Membre régulier
 
Date d'inscription: mars 2009
Localisation: Amiens
Âge: 21
Messages: 114
Par défaut

Sinon, tu peux donner un attribut class à tes éléments mail, et faire appel à la fonction getElementsByClassName() pour les récupérer dans un tableau (fonction ci-dessous à copier dans ton code Javascript) :

Code :
function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|s)" + className + "(s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i ];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}
(Code trouvé ici => http://communaute.medialibs.com/forum/topic-652.html)

Fonction testée sous Unix, mais normalement ça devrait aussi marcher sous Windows.
_jey_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 17h39   #8 (permalink)
Expert Confirmé Sénior
 
Avatar de Erwan31
 
Date d'inscription: février 2008
Localisation: Revel
Messages: 2 104
Par défaut

Citation:
Envoyé par gwyohm Voir le message
Code :
if (
	document.forms['RegisterForm'].elements['Email'][0].value == '' ||
	document.forms['RegisterForm'].elements['EmailCtc'][0].value == '')
// Tu n'as qu'un champ EmailCtc, non ?
	  {
    alert('Adresse email obligatoire !');
    document.forms['RegisterForm'].elements['Email'].focus();
    document.forms['RegisterForm'].elements['EmailCtc'].focus();
    // Supprime une des deux lignes au dessus : tu donnes le focus à Email et immédiatement après à EmailCtc
    return false;
  }
Oui un seul champ EmailCtc mais chaque champs a aussi un id avec le même nom donc ils doivent être uniques:
Code :
<input type="text" name="EmailCtc" id="EmailCtc" size="25" maxlength="40" class="txt" value="{$Email}" />
Ton code ne marche pas et je ne comprends pas bien ta deuxième remarque.
La page en question.

@_jey_ Merci mais je suis bien incapable de fusionner cette fonction avec la fonction checkfield sans faire d'erreur de syntaxe ou de logique :-/
Erwan31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 18h51   #9 (permalink)
Modérateur
 
Avatar de gwyohm
 
Date d'inscription: octobre 2007
Localisation: Paris
Messages: 490
Par défaut

Je comprends mieux ton problème ; tes champs Email et EmailCtc ne sont pas dans le même formulaire.
Code :
if(document.forms['RegisterForm'].elements['Email'].value == '' ||
document.forms['ContactForm'].elements['EmailCtc'].value == '')
Et visiblement s'il n'y a qu'un élément il ne faut pas spécifier l'index...

Cependant, il reste à mon avis un problème fonctionnel :
Quand on s'apprête à soumettre un formulaire (sur les 2 différents), les 2 formulaires sont validés.


Ma remarque du post précédent était juste pour signaler que tu donnais le focus à chacun des champs. Or à un instant t un seul champ peut avoir le focus.
__________________
on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 19h43   #10 (permalink)
Expert Confirmé Sénior
 
Avatar de Erwan31
 
Date d'inscription: février 2008
Localisation: Revel
Messages: 2 104
Par défaut

Ah ben oui forcément Merci ça marche!

Autre problème:

Depuis que j'ai ajouté l'appel à la fonction checkfield dans le onclick, la fonction de submit n'est plus prise en compte et se trouve remplacée par la lien href (#):
(je ne malheureusement pas passer l'appel dans le href via un javascript:...)

Code :
<a onclick="return CheckField(); document.forms['RegisterForm'].submit();" href="#"
Erwan31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/07/2009, 09h07   #11 (permalink)
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Date d'inscription: septembre 2007
Localisation: Madagascar
Messages: 1 994
Par défaut

Salut,
C'est due au return false dans la fonction CheckField().
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/07/2009, 09h53   #12 (permalink)
Modérateur
 
Avatar de gwyohm
 
Date d'inscription: octobre 2007
Localisation: Paris
Messages: 490
Par défaut

Citation:
C'est due au return false dans la fonction CheckField().
Non, c'est du au fait que l'instruction de soumission du formulaire ne peut pas être atteinte :
Code :
<a onclick="return CheckField(); document.forms['RegisterForm'].submit();" href="#"
Il y a un return sur la premiere instruction.
Par contre il faut s'assurer que CheckField renverra true quand il n'y a pas d'erreur et tu pourras faire
Code :
<a onclick="if( CheckField() ) { document.forms['RegisterForm'].submit()};" href="#"
__________________
on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/07/2009, 10h49   #13 (permalink)
Expert Confirmé Sénior
 
Avatar de Erwan31
 
Date d'inscription: février 2008
Localisation: Revel
Messages: 2 104
Par défaut

Si je supprime les returni false ou que je met ton code (sans le return donc) gwyohm, la suite des instruction s'enchaine (une fois que j'ai validé la première alerte pour OK, la deuxième apparait etc.
Erwan31 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/07/2009, 10h56   #14 (permalink)
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Date d'inscription: mars 2002
Localisation: Au coeur de la Nébuleuse de la Rainette
Messages: 22 666
Par défaut

J'ai cru lire plus haut que si il n'y avait qu'un seul element de même name sur la page ou dans le form on pouvait se passer des indexes ..

Je dois contredire cette information.
getElementsByName retourne une collection, meêm si celle ci ne comporte qu'un seul élément il faut passer par les indexes:
Code :
 
<body>
<input name="myname" />
</body>
<script>
alert(document.getElementsByName('myname').name)//undefined
alert(document.getElementsByName('myname')[0].name)//myname
</script>
 
__________________
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )
Citation:
Deux règles du succès:
1) Ne communiquez jamais à quelqu'un tout votre savoir...

Votre post a trouvé une réponse qui vous satisfait ? Alors n'oubliez pas le Tag

réalisations web (developpeur et/ou infographiste et/ou chef de projet:
www.saftair.com| www.ouestisol.fr | www.sebemex.fr
| www.sistac-alizay.fr | www.planet-languages.com | www.acoustishop.fr | www.litt.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/07/2009, 11h27   #15 (permalink)
Modérateur
 
Avatar de gwyohm
 
Date d'inscription: octobre 2007
Localisation: Paris
Messages: 490
Par défaut

Citation:
Envoyé par SpaceFrog Voir le message
J'ai cru lire plus haut que si il n'y avait qu'un seul element de même name sur la page ou dans le form on pouvait se passer des indexes ..

Je dois contredire cette information.
getElementsByName retourne une collection, meêm si celle ci ne comporte qu'un seul élément il faut passer par les indexes:
Je parlais de document.forms["formName"].elements["jambon"] et non de getElementsByName.
Si je n'ai qu'un champ "jambon" dans mon formulaire, document.forms["formName"].elements["jambon"][0] me renvoie undefined
Code :
<html><head><title></title></head>
<body>
<form name="form1">
	<input type="text" name="jambon"/>
	<input type="button" onclick="alert(document.forms['form1'].elements['jambon'][0]);"/>
</form>
<hr/>
<form name="form2">
	<input type="text" name="jambon"/>
	<input type="text" name="jambon"/>
	<input type="button" onclick="alert(document.forms['form2'].elements['jambon'][0]);"/>
</form>
</body>
</html>
__________________
on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation
NEWS JAVASCRIPTF.A.Q JSTUTORIELS JSSOURCES JSLIVRES JS

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 22h00.


Vos questions techniques : forum d'entraide JavaScript - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.