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 :

Insertion d'un élément select alphabétiquement


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut Insertion d'un élément select alphabétiquement
    Bonjour,

    J'insère un élément ou plusieurs dans un select comportant plus de 1500 éléments.
    Je souhaite que l'ordre alphabétique soit respecté.
    J'ai donc créer un code avec passage par un tableau de travail :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    //******** Transfert des éléments sélectionnés d'une liste dans une autre *******
     
    function transf_select(form,liste1,liste2) 
    {
    try{
     
    	var nb_elt = document.getElementsByName(liste1)[0].length;
    	var tab = new Array();			// Tableau de travail dans lequel on copie les éléments sélectionnés 
    									// de la liste1 puis les éléments déjà existants de la liste 2. On trie 
    									// ensuite le tableau avant de remplacer les éléments de la liste 2 par 
    									// les valeurs du tableau trié.
    	var texte = "";
    	var p = 0;						// Position du dernier espace de chaque élément du tableau tab. Permet
    									// de récupérer la dernière valeur de chaque élément
     
    	var i = 0;
    	while(i < nb_elt)
    	{
    		if(document.getElementsByName(liste1)[0].options[i].selected == true)
    		{
    			// Initialisation de tab avec les valeurs sélectionnées de la liste1 (Nom+prénom+" "+identifiant)
    			texte = document.getElementsByName(liste1)[0].options[i].text+" "+
    					document.getElementsByName(liste1)[0].options[i].value;
    			tab.push(texte);
    			// Supprime l'élément de la liste1
    			document.forms[form].elements[liste1].options.remove(i);
    			nb_elt--;
    		}
    		else
    			i++;
    	}
     
    	// Ajoute à tab les valeurs de liste2
    	nb_elt = document.getElementsByName(liste2)[0].length;
     
    	i = nb_elt - 1;
    	while(i >= 0)
    	{
    		// Ajoute les éléments de la liste2 dans tab (Nom+prénom+" "+identifiant)
    		texte = document.getElementsByName(liste2)[0].options[i].text+" "+
    				document.getElementsByName(liste2)[0].options[i].value;
    		tab.push(texte);
    		// Supprime l'élément de la liste2 
    		document.forms[form].elements[liste2].options.remove(i);
    		// Compte le nb d'éléments restant après suppression
    		i--;
    	}
    	// Tri du tableau
    	tab.sort();
    	// Recopie les valeurs de tab dans liste2
    	for (i=0;i<tab.length;i++)
    	{
    		// Cherche la position du dernier espace dans la chaine "Nom prénom identifiant"
    		p = tab[i].lastIndexOf(" ",tab[i].length);
    		// Initialise la variable texte avec le nom + prénom
    		texte = tab[i].substring(0,p);
    		// Initialise la variable valeur avec l'identifiant
    		valeur = tab[i].substring(p,tab[i].length);
    		// Ajoute un élément dans liste2
    		ajout_element(texte,valeur,form,liste2,-1);
    	}
    	// Déselectionne les éléments sélectionnés des 2 listes
    	document.getElementsByName(liste1)[0].selectedIndex = -1;	
    	document.getElementsByName(liste2)[0].selectedIndex = -1;
     
    }catch(err){	texte_err = "Une exception s'est produite lors de l'exécution de la fonction transf_select()\n\n";
    				texte_err+= "Nom de l'exception : " + err.name+"\n\n";
    				texte_err+= "Message d'erreur reçu : " + err.message+"\n\n";
    				texte_err+= "Merci de contacter le service Informatique.";
    				alert(texte_err);}
    }
    Le traitement se déroule correctement mais est long.

    Connaissez-vous une autre solution ?
    Merci pour vos idées

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par licorne Voir le message
    Le traitement se déroule correctement mais est long.

    Connaissez-vous une autre solution ?
    Effectivement !
    Une autre méthode est l'autocomplémention : saisie dans un input des N premières lettres. Puis via Ajax, alimentation de la liste uniquement avec les lignes correspondantes ...

    Technique entièrement décortiquée par DenisC dans la FAQ Ajax

    A+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 401
    Points : 145
    Points
    145
    Par défaut
    Je te remercie pour cette information.
    C'est assez long à décortiquer pour vraiment comprendre comment ça marche mais je m'y mets tout de suite.

    Bonne fin de journée.

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

Discussions similaires

  1. Insertion dans une div d'éléments <select>
    Par eloiflesch dans le forum jQuery
    Réponses: 1
    Dernier message: 31/07/2009, 00h51
  2. insertion à base d'un select
    Par wwave dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/07/2006, 18h39
  3. [Débutant] INSERT INTO avec VALUES + SELECT
    Par Feezdev dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/06/2006, 10h10
  4. [Res]Procédure stockée qui fait un insert basé sur un select
    Par wonderliza dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/12/2005, 18h25
  5. effectuer une requete insert avec 'values' ET 'select'
    Par delaio dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/08/2004, 19h05

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