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 :
Le traitement se déroule correctement mais est long.
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);} }
Connaissez-vous une autre solution ?
Merci pour vos idées
Partager