IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

échange entre select multiple


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 16
    Points
    16
    Par défaut échange entre select multiple
    edit: rah zut je crois savoir d'où vient l'erreur, je supprime des élements de la liste en mm temps que je déplace donc le length n'est plus cohérent à l'itération suivante, je cherche une soluce et je mettrais à jour ce sujet



    Voilà j'ai dans mon formulaire une zone où j'ai 2 select multiple avec au milieu des boutons pour faire des échanges entre les deux, j'ai créer une fonction pour ajouter (de gauche à droite) et supprimer un élément (de droite à gauche) et 2 autres fonctions pour tout ajouter et tout supprimer.

    Les 2ere marchent trés bien (ajout/supp élément unique), mais lorsque j'utilise l'ajout ou la suppression multiple seul une partie des éléments se copie et pas tous bizzare...

    ma fonction ajouter_tous: (supprimer_tous est sensiblement la mm dans l'autre sens):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    function ajouter_tous(liste1,liste2)
    {
     
    	var i=0;	
     
    	if (liste1.options.length>0)
     
    	{
            alert(liste1.options.length); // affiche la bonne valeur !!!
     
    	while ( i<liste1.options.length  )
    	{
    	opt = new Option(liste1.options[i].text,liste1.options[i].value);
     
     
    	liste2.options[liste2.options.length]=opt;
    	liste1.options[i]=null;		
    	i++;
    	}
     
    	}
    	else
    		{
    			alert("liste vide!");
    		}
    }
    voilà comprend pas trop, surtout lorsque j'affiche la taille des listes elles sont Ok par contre la boucle ne semble pas aller jusqu'a la bonne valeur de i, dans ma liste par exempe de 14 éléments la boucle va jusqu'a la 7e itération (i=6)...

    merci pour vos réponses

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par mgemc2
    voilà comprend pas trop, surtout lorsque j'affiche la taille des listes elles sont Ok par contre la boucle ne semble pas aller jusqu'a la bonne valeur de i, dans ma liste par exempe de 14 éléments la boucle va jusqu'a la 7e itération (i=6)...
    Décomposons :

    Soit la liste L1 avec {e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14} 14 élements, comme dans ton cas.

    Je passe dans ton code:
    premier if, ok
    alert, ok
    j'arrive dans le while :
    • i vaut 0, L1 a pour longueur 14 : je transfere l'élement e1 de L1 dans L2, j'augmente i à 1. Je repars dans la boucle.
    • i vaut 1, L1 a pour longueur 13 (eh oui, tu a supprimé e1) : je transfere e3 (qui est bien le deuxième élement de la liste) de L1 dans L2. J'augmente i à 2
    • i vaut 2, L1 a pour longueur 12 : je transfere e5 (qui est bien le troisième élement de la liste) de L1 dans L2. J'augmente i à 3
    • i vaut 3, L1 a pour longueur 11 : je transfere e7 de L1 dans L2. J'augmente i à 4
    • i vaut 4, L1 a pour longueur 10 : je transfere e9 de L1 dans L2. J'augmente i à 5
    • i vaut 5, L1 a pour longueur 9 : je transfere e11 de L1 dans L2. J'augmente i à 6
    • i vaut 6, L1 a pour longueur 8 : je transfere e13 de L1 dans L2. J'augmente i à 7
    • i vaut 7, L1 a pour longueur 7 : je sors de la boucle ....


    Tu vois d'ou viens le problème?

    Ta condition devrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while ( liste1.options.length>0 )
    En agissant toujours sur l'élement 0 de ta liste....

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    en effet ta solution est plus élégante que ce que j'ai finalement fait à savoir faire une copie de liste 1 > liste 2 et vider(liste1), en terme de temps d'exécution la tienne est aussi meilleur puis moi je dois faire 2 parcours de ma liste...
    merci pr ta réponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Select multiple
    Par lfournial dans le forum Struts 1
    Réponses: 20
    Dernier message: 24/02/2011, 12h14
  2. [Select multiple] Transfert entre 2 listes
    Par Sayrus dans le forum Débuter
    Réponses: 2
    Dernier message: 17/04/2008, 13h25
  3. Problème entre 2 listbox à selection multiple
    Par SoaB dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 24/10/2005, 16h05
  4. <select multiple ...>
    Par ayobo dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 08h49
  5. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo