Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Site Web > XHTML / CSS > Passer des éléments d'une liste à une autre > Lecture du sujet

Passer des éléments d'une liste à une autre

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne rel`s # Posté le 27/07/2008 à 17:39:05
Avatar
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 :
Image utilisateur
Édité le 28/07/2008 à 02:44:39 par rel`s
Hors ligne The French # Posté le 27/07/2008 à 19:37:25
un zero, deux zero, zzzzzzzz
Avatar
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 : JavaScript
1
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 : JavaScript
1
var p = new Option(document.getElementById(from).options[yo].value,document.getElementById(from).options[yo].innerHTML);

Ou l'inverse
Hors ligne rel`s # Posté le 27/07/2008 à 23:04:35
Avatar
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
Hors ligne Yano # Posté le 28/07/2008 à 00:07:31
Avatar
Groupe : Membres
Bonjour,

Il existe une méthode add() pour ajouter des items dans un select.

Ça ne pourrait pas servir ?


Hors ligne rel`s # Posté le 28/07/2008 à 02:34:26
Avatar
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 :euh:

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 : JavaScript
1
new Option(texte, valeur, Sélection_par_défaut, sélection)
Édité le 28/07/2008 à 02:42:51 par rel`s

Retour au forum "XHTML / CSS" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 471 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.4266s (0.3984s)