Partage
  • Partager sur Facebook
  • Partager sur Twitter

Supprimer options d'un select

Sujet résolu
    24 août 2011 à 16:48:27

    Bonjour à tous. J'ai voulu faire un script JS pour mon formulaire, qui enlèverait les options quand celle ci a déja été choisie. Je vous explique.

    Voici mon formulaire:
    <form method="post" action="index.php?module=activites&action=gestion_team" style="text-align: center;">
    	<?php for ($i = 1 ; $i <= $nb_pokemon ; $i++){ ?>
    		<label for="ordre<?php echo $i; ?>">Pokemon N°<?php echo $i; ?> : </label>
    		<select name="ordre<?php echo $i; ?>" onchange="team(<?php echo $i; ?>, this.form);">
    		<?php foreach($pokemon as $data){ ?>
    			<option value="<?php echo $data['id_pokemon']; ?>"><?php echo $data['nom_pokemon']; ?> (Lvl <?php echo $data['niveau']; ?>)</option>
    		<?php } ?>
    		</select><br /><br />
    	<?php } ?>
    		<input type="submit" value="Modifier l'ordre" />
    </form>
    


    La fonction JS:
    function team(chiffre, formulaire)
    {
    	var nom = "ordre" + chiffre; //Nom du select (ordre1 à ordre6)
    	var id_pokemon = formulaire.nom.options[formulaire.nom.selectedIndex].value; //Id choisi dans le formulaire
    	
    	for (i = chiffre, i <= 6, i++){
    	
    		var ordre = "ordre" + i; 
    		var id2 = formulaire.ordre.options[formulaire.ordre.selectedIndex].value; 
    		
    		if (id_pokemon == id2){
    		
    			formulaire.ordre.parentNode.removeChild(options); //Si l'id est le même que celui choisi, alors on le supprime (pour chaque select suivant)
    		
    		}
    	}
    }
    


    En gros ça donne un formulaire avec 6 liste déroulante, et chaque liste a 6 choix.
    Quand on choisi un des 6 choix sur la liste N°1, et bien le choix s'élimine sur les 5 autres liste déroulantes, et ainsi de suite.

    Sauf que le truc des noeuds et tout, j'ai pas vraiment compris, donc j'aurai juste besoin qu'on m'oriente un peu pour terminer ma fonction.

    Je pense qu'il doit y avoir des trucs pas bien réglo dans ma fonction :-°
    Donc merci a tout ceux qui m'aideront :D
    • Partager sur Facebook
    • Partager sur Twitter
      24 août 2011 à 20:07:43

      formulaire.nom.options Non ! Sinon il cherche un truc qui s'appelle "nom" dans ton formulaire.

      > formulaire[nom].options Pareil pour le selectedIndex, et pareil pour formulaire.ordre

      for (i = chiffre, i <= 6, i++)
      1. C'est des ; et non des ,
      2. Déclare i
      3. Fait une condition de sortie qui s'adapte

      > for (var i = chiffre; i < formulaire[nom].options.length; i++) {

      formulaire.ordre.parentNode.removeChild(options);
      Supprime la bonne option et avec le bon parent

      > formulaire[ordre].removeChild(formulaire[ordre].options[i]);

      Vu que tu supprimes un élément, décrémente i après la suppression

      > i--;

      Et il te manque une boucle for, car tu te bases sur le selectedIndex là..


      function team(chiffre, formulaire)
      {
      	var nom = "ordre" + chiffre; //Nom du select (ordre1 à ordre6)
      	var id_pokemon = formulaire[nom].options[formulaire[nom].selectedIndex].value; //Id choisi dans le formulaire
      	
      	// J'vois pas pourquoi tu pars de chiffre ici et non de 0, mais bon.
      	for (var i = chiffre; i < formulaire[nom].options.length; i++){
      	
      		var ordre = "ordre" + i; 
      		
      		
      		for (var j = 0; j < formulaire[ordre].options.length; j++) {
      			var id2 = formulaire[ordre].options[j].value; 
      		
      			if (id_pokemon == id2){
      			
      				formulaire[ordre].removeChild(formulaire[ordre].options[j]); //Si l'id est le même que celui choisi, alors on le supprime (pour chaque select suivant)
      				
      				j--;
      			
      			}
      		}
      	}
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        25 août 2011 à 15:54:07

        Merci de ta réponse, pour la boucle, trop l'habitude de la faire en php que je la rate en JS ^^
        Pour les variable entre crochet, je savais pas :euh:

        Sinon tu as raison, j'ai mis i = 0 dans la boucle, mais mis une condition derrière pour éviter de supprimer le choix de toute les listes déroulantes.

        Ensuite si cette ligne compte le nombre d'options présent dans le "select"
        formulaire[ordre].options.length
        


        Alors cette ligne ne va pas:

        formulaire[nom].options.length
        


        car cette boucle doit compter le nombre de select, et non les options.

        Et pour confirmation, cette ligne signifie, valeur de l'option numero i ?

        var id2 = formulaire[ordre].options[j].value;
        


        Avec tout ça, j'obtiens une nouvelle fonction que j'ai retouchée et qui ne fonctionne pas, je pense que mes retouches doivent être un peu bizarre.
        Ta fonction ne fonctionnait pas non plus.

        function team(chiffre, formulaire)
        {
        	var nom = "ordre" + chiffre; //Nom du select ou la valeur a été prise(ordre1 à ordre6)
        	var id_pokemon = formulaire[nom].options[formulaire[nom].selectedIndex].value; //Id choisi dans le formulaire
        	
        	//Chaque liste déroulante est analysé pour supprimer l'id choisi (sauf la liste qui a été activée)
        	for (var i = 1; i < formulaire.select.length; i++){
        	
        		if ($i != $chiffre){
        		
        			var ordre = "ordre" + i; //Nom des select (ordre1 à ordre6)
        			
        			for (var j = 0; j < formulaire[ordre].options.length; j++) {
        				var id2 = formulaire[ordre].options[j].value; 
        			
        				if (id_pokemon == id2){
        				
        					formulaire[ordre].removeChild(formulaire[ordre].options[j]); //Si l'id est le même que celui choisi, alors on le supprime (pour chaque select suivant)
        					
        					j--;
        				
        				}
        			}
        		}
        	}
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          25 août 2011 à 17:43:03

          Citation : bart79


          car cette boucle doit compter le nombre de select, et non les options.



          Ouais effectivement je suis allé trop vite.
          > for (var i = 1; i <= formulaire.getElementsByTagName('select').length; i++) {


          Citation : bart79


          Et pour confirmation, cette ligne signifie, valeur de l'option numero i ?



          Ouais, enfin, l'option numéro j+1. La première option étant la j=0


          Citation : bart79


          if ($i != $chiffre){
          




          Wtf? Relis toi un peu.


          function team(chiffre, formulaire)
          {
          	var nom = "ordre" + chiffre; //Nom du select ou la valeur a été prise(ordre1 à ordre6)
          	var id_pokemon = formulaire[nom].options[formulaire[nom].selectedIndex].value; //Id choisi dans le formulaire
          	
          	//Chaque liste déroulante est analysé pour supprimer l'id choisi (sauf la liste qui a été activée)
          	for (var i = 1; i <= formulaire.getElementsByTagName('select').length; i++) {
          	
          		if (i != chiffre) {
          		
          			var ordre = "ordre" + i; //Nom des select (ordre1 à ordre6)
          			
          			for (var j = 0; j < formulaire[ordre].options.length; j++) {
          				var id2 = formulaire[ordre].options[j].value; 
          			
          				if (id_pokemon == id2){
          				
          					formulaire[ordre].removeChild(formulaire[ordre].options[j]); //Si l'id est le même que celui choisi, alors on le supprime (pour chaque select suivant)
          					
          					j--;
          				
          				}
          			}
          		}
          	}
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            25 août 2011 à 18:34:26

            Cela fonctionne parfaitement.
            Merci de ton aide, même si j'ai été un alève turbulent mdrr
            Je voulais essayer d'améliorer la fonction, mais je ne vois pas comment cela est possible (en cas de changement sur la meme liste, remettre les données effacer).

            Alors je m'arrête là, je verrai ça plus tard. Je clos :D
            • Partager sur Facebook
            • Partager sur Twitter

            Supprimer options d'un select

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown