nom des options ....

Eléphanteau du PHP | 29 Messages

13 juin 2006, 09:07

Bonjour tout le monde, dans mon menu de type <select></select> je dois donc afficher des noms, pour pouvoir les aujouter dans une autre liste, pour ca pas de pb. Par contre il ne faut pas que l'on puisse mettre deux fois le mm nom et la je suis embeter :oops: ....

voila mon code si qq'un a une idée pour resoudre ce probleme:

Code : Tout sélectionner

function evaluation() { for (i=0; i<document.recherche_nom.liste.options.length; i++) { if (document.recherche_nom.liste.options[i].selected ) { text=document.recherche_nom.liste.options[i].text; value=document.recherche_nom.liste.options[i].value; document.recherche_nom.liste2.options[document.recherche_nom.liste2.options.length] = new Option( text, value); } } }

Mammouth du PHP | 684 Messages

13 juin 2006, 10:33

Salut.

Si je comprends ton code, tu fais un simple duplicata de tes données.
Tu la fais où ta comparaison ???

A priori, il faut que tu compare chaque éléments de ta liste1 avec ta liste2 et ton code fera la comparaison.
Algo :
Prendre un élément de liste1 en mémoire, le rechercher dans liste2.
Si élément de liste1 trouvé dans liste2 alors faut s'arrêter et signaler l'erreur. Sinon tout c'est bien passé.
Zigz4g

Eléphanteau du PHP | 29 Messages

13 juin 2006, 10:57

justement c'est ca le soucis quand je veux comparer les valeurs il ne se passe rien donc mon code doit avoir une erreur mais je n'arrive pas a savoir ou...

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

13 juin 2006, 11:59

Ben c'est surtout que ton code ne fait pour l'instant absolument aucune comparaison, il se contente juste de créer les options sélectionnées dans l'autre liste :)

Ce qu'il te faut c'est dans ton if, avant de dupliquer l'option, boucler sur liste2 et si jamais tu trouves une option avec la même valeur, utiliser le mot clé "continue" pour passer au suivant sans dupliquer l'option :)

Invité
Invité n'ayant pas de compte PHPfrance

13 juin 2006, 14:09

je sais Ryle que mon code ne fait aucaune comparaison...
et c'est la le pb je ne sais pas comment faire, toutes les comparaion que j'ai voulu faire n'ont jamais fonctionner, je voulais savoir si vous pouviez m'aider a faire ce petit bout de code qui me donne tant de soucis ^^ :roll:

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

13 juin 2006, 14:46

Mouais... mais que ca ne devienne pas une habitude hein ;)
if (document.recherche_nom.liste.options[i].selected ) { 
  text=document.recherche_nom.liste.options[i].text; 
  value=document.recherche_nom.liste.options[i].value; 

  var dejaPresent = false; // flag pour savoir si on trouve la valeur dans l'autre liste
  // on boucle sur la 2ème liste
  for(var j=0; j<document.recherche_nom.liste2.options.length; j++) {
    if(value == document.recherche_nom.liste2.options[j].value) { // comparaison ligne à ligne
      dejaPresent = true; // la valeur est déjà présente
      break; // on sort de la boucle
    }
  }

  if(!dejaPresent) // si la valeur n'est pas présente, on ajoute l'option
    document.recherche_nom.liste2.options[document.recherche_nom.liste2.options.length] = new Option(text, value); 

}

Eléphanteau du PHP | 29 Messages

13 juin 2006, 15:29

merci ryle ton code m'a servit a faire le miens et CA MARCHE :)
vous etes tous trop fort :) !!!!!!!!

pour ceux que ca interesse voila la solution:

Code : Tout sélectionner

function ajouteNom() { for (i=0; i<document.recherche_nom.liste.options.length; i++) { if (document.recherche_nom.liste.options[i].selected ) { text = document.recherche_nom.liste.options[i].text; value = document.recherche_nom.liste.options[i].value; trouve=false; for (j=0;j<document.recherche_nom.liste2.options.length;j++) { chaine1 = text; chaine2 = document.recherche_nom.liste2.options[j].text; if (chaine1 == chaine2) trouve=true; } if (trouve == false) document.recherche_nom.liste2.options[document.recherche_nom.liste2.options.length] = new Option( text, value); } } }