Page 1 sur 1

nom des options ....

Posté : 13 juin 2006, 09:07
par JDante
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); } } }

Posté : 13 juin 2006, 10:33
par zigz4g
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é.

Posté : 13 juin 2006, 10:57
par JDante
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...

Posté : 13 juin 2006, 11:59
par Ryle
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 :)

Posté : 13 juin 2006, 14:09
par Invité
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:

Posté : 13 juin 2006, 14:46
par Ryle
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); 

}

mirci mirci

Posté : 13 juin 2006, 15:29
par JDante
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); } } }