Controle de deux liste déroulante

Eléphant du PHP | 107 Messages

01 avr. 2008, 17:08

Bonjour

Je voudrais valider deux listes déroulantes c'est à dire rendre obligatoire le choix dans les 2 listes déroulantes

Les valeurs dans les deux listes deroulantes sont des dates

Voici deux options que je voudrais faire

si l'utlisateur ne choisit pas => boite de dialogue javascript lui obligeant de choisir

si date1>date2 ==> boite de dialogue javascript lui informant un erreur


merci pour votre aide ou lien

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 avr. 2008, 17:15

Pour vérifier qu'une option a été sélectionnée dans une liste déroulante, il te suffit de vérifier que l'attribut selectedIndex de celle-ci est supérieur à -1 (ou 0 si tu met une option de type "choisissez." en début de liste)
if (document.nom_formulaire.nom_champ.selectedIndex <= 0) 
  alert ('Vous devez renseigner le champ ...');
Pour récupérer la valeur sélectionnée d'une liste déroulante :
document.nom_formulaire.nom_champ.options[document.nom_formulaire.nom_champ.selectedIndex].value
Certains navigateurs acceptent aussi
document.nom_formulaire.nom_champ.value
mais pas encore tous... donc autant utiliser la première, même si elle est plus longue à taper :)

Quant à la comparaison de date, tout dépend du format, mais ce ne sont pas les exemples qui doivent manquer sur le forum ou le web ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1996 Messages

01 avr. 2008, 22:00

Pour vérifier qu'une option a été sélectionnée dans une liste déroulante, il te suffit de vérifier que l'attribut selectedIndex de celle-ci est supérieur à -1 (ou 0 si tu met une option de type "choisissez." en début de liste)
if (document.nom_formulaire.nom_champ.selectedIndex <= 0) 
  alert ('Vous devez renseigner le champ ...');
Hmm interessant. Est ce que cela marche aussi avec document.getElementById ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 107 Messages

02 avr. 2008, 10:07

Bonjour

voici le code que j'ai ecrit :

function Control()
 {
    if (document.Form.champ.selectedIndex <= 0)
     {
       alert (' choisir une date!');   
       return false;
     }
	  else if(document.Form.champ1.selectedIndex <= 0)
     {
		alert (' choisir une date!');   
        return false;
	  }elseif(document.Form.champ.options[document.Form.champ.selectedIndex].value > document.Form.champ1.options[document.Form.champ1.selectedIndex].value )
	  {
		alert ('La première date choisie doit être inférieure au second !');   
       return false;
      } 
	  else if(document.Form.champ.options[document.Form.champ.selectedIndex].value = document.Form.champ1.options[document.Form.champ1.selectedIndex].value )
	  {
		alert ('Les dates doivent être différentes !');   
       return false; 
	  } else{ return true;}
 }

ça marche sauf le dernier test :
if(document.Form.champ.options[document.Form.champ.selectedIndex].value = document.Form.champ1.options[document.Form.champ1.selectedIndex].value )
Mes dates sont aux formats 2008-03-22 par exemple

Si je choisi 2008-03-22 et 2008-03-22 dans les 2 listes déroulantes le message d'alerte s'affiche bien ==> là c'est OK :)
Or si je choisi 2008-03-22 et 2008-04-01 l'alerte s'affiche encore alors que les date sont différentes :( ???
Là je suis bloqué


merci pour votre conseil

Mammouth du PHP | 1353 Messages

02 avr. 2008, 10:55

Attention à toujours mettre == pour comparer des valeurs et non pas = qui sert à l'affectation d'une valeur... ;)

La dans ton dernier elseif tu donnes la même valeur aux deux dates et tu rentres forcement dans ce elseif si la première valeur existe...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 107 Messages

02 avr. 2008, 11:18

OK :) ça a marché merci

bien à vous :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 avr. 2008, 11:29

Hmm interessant. Est ce que cela marche aussi avec document.getElementById ?
Normalement, y a pas de raison que cela ne fonctionne pas.

Que tu passes par getElementById ou par le dom, tant que les deux te retournent bien l'objet select, tu peux consulter son attribut selectedIndex pour savoir quelle ligne est sélectionnée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1996 Messages

02 avr. 2008, 15:32

Merci Ryle.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr