 Groupe : Membres
|
Bonjour,
Je me suis inspiré d'un script trouvé sur le net pour pouvoir transférer des éléments entre deux listes de type select.
Tout fonctionne bien mis à part une chose,
Lors du transfert il prend la valeur de l'option de la liste et la met dans celle de droite.
Or, je voudrais qu'il recrée la même <option value="1234">Mon Choix</option>, à la place il me met <option>1234</option>
Je joins des screen,
Si vous pouvez m'aider ?
Voila le code :
Code : JavaScript 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | function changeCol(from,to) {
// Passe les données de la liste 1 à la liste 2 et les trie par ordre alphabétique
for(yo = 0; yo < document.getElementById(from).length; yo++) {
if(document.getElementById(from).options[yo].selected == true){
var p = new Option(document.getElementById(from).options[yo].value,document.getElementById(from).options[yo].value);
document.getElementById(to).options[document.getElementById(to).options.length]=p;
document.getElementById(from).options[yo] = null;
yo=yo-1;
}
}
// On trie de la liste, on creer un tableau, on le trie et on reconstruit la liste
var tbl = new Array()
for(i = 0; i < document.getElementById(to).length; i++) {
tbl.push(document.getElementById(to).options[i].value);
}
tbl.sort();//trie le tableau
document.getElementById(to).options.length=0;//efface la liste 2
for(i = 0; i < tbl.length; i++) { //rempli la liste avec les données trié
var p = new Option(tbl[i],tbl[i]);
document.getElementById(to).options[document.getElementById(to).options.length] = p;
}
}
|
Un tout grand merci.
Les Screens :
Édité
le 28/07/2008 à 02:44:39
par rel`s
|
un zero, deux zero, zzzzzzzz
 Groupe : Membres
|
Je ne connais pas les objet de type Option mais je pense que tu fournis la valeur et le contenu de l'option dans le constructeur :
Code : JavaScript1 | var p = new Option(document.getElementById(from).options[yo].value,document.getElementById(from).options[yo].value);
|
La tu envoie deux fois la valeur de l'option. Essaye de mettre :
Code : JavaScript1 | var p = new Option(document.getElementById(from).options[yo].value,document.getElementById(from).options[yo].innerHTML);
|
Ou l'inverse
|
 Groupe : Membres
|
Malheureusement ça ne fonctionne pas :-/
Ca fonctionne de gauche à droite mais pas de droite à gauche
Édité
le 27/07/2008 à 23:05:52
par rel`s
|
 Groupe : Membres
|
Bonjour,
Il existe une méthode add() pour ajouter des items dans un select.
Ça ne pourrait pas servir ?
|
 Groupe : Membres
|
Après quelques recherches sur le Net et à votre aide, j'ai réussi à avoir un transfert parfait !
Je vous donne mon code pour ceux que ça intéresse :
Code : JavaScript 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 | function changeCol(from,to) {
// Passe les données de la liste FROM à la liste TO et les trie par ordre alphabétique
for(i = 0; i < document.getElementById(from).length; i++) {
if(document.getElementById(from).options[i].selected == true){
var contenu = new Option(document.getElementById(from).options[i].text,document.getElementById(from).options[i].value);
document.getElementById(to).options[document.getElementById(to).options.length] = contenu;
document.getElementById(from).options[i] = null;
i=i-1;
}
}
// On trie de la liste, on creer un tableau, on le trie et on reconstruit la liste
var tabFinal = new Array()
for(i = 0; i < document.getElementById(to).length; i++) {
tabFinal[i][0] = document.getElementById(to).options[i].text;
tabFinal[i][1] = document.getElementById(to).options[i].value;
}
tabFinal.sort(); // Trie le tableau final
document.getElementById(to).options.length = 0; // Efface la liste TO
for(i = 0; i < tabFinal.length; i++) { // Rempli la liste avec les données triées
var contenu = new Option(tabFinal[i][0],tabFinal[i][1]);
document.getElementById(to).options[document.getElementById(to).options.length] = contenu;
}
}
|
Il me reste un petit soucis, comment trier un tableau qui a plusieurs dimensions ? Car actuellement le tri ne fonctionne pas
Un tout grand merci pour votre aide !
P.S. : La methode Add() permet juste d'ajouter un élément mais pas sa valeur + text.
Ce que permet Code : JavaScript1 | new Option(texte, valeur, Sélection_par_défaut, sélection)
|
Édité
le 28/07/2008 à 02:42:51
par rel`s
|