Rechercher : dans
Par :

Listes affichées dynamiquement - Javascript

Dernière réponse le 21 mar 2009 à 08:23:18 momo_72, le 22 jan 2009 à 23:43:02 
 Signaler ce message aux modérateurs

Bonjour,

Je n'ai aucune notion de javascript à part les bases rudimentaires, j'ai cherché longtemps sur internet pour trouver une solution à mon problème mais en vain. Voilà mon problème: sur mon site, j'aimerais afficher un formulaire dans lequel apparait une liste <select>. Je souhaite qu'en fonction de l'élément de la liste (<option>) choisi par l'utilisateur, apparait en bas une autre liste <select> correspondante. Par exemple, l'utilisateur voit s'afficher une liste de produits cosmétiques. Une fois qu'il choisit un de ces produits, une autre liste apparaît plus bas lui proposant les différentes formes d'emballages correspondant au produit qu'il vient de sélectionner.

J'espère que j'ai été assez clair. SVP, si quelqu'un a un script tout prêt ou une ébauche de script, ça serait sympa de me le communiquer.

merci d'avance,

Configuration: Windows Vista
Internet Explorer 7.0

Meilleures réponses pour « Listes affichées dynamiquement Javascript » dans :
[MS-Dos] Lister le contenu d'un répertoire dans un fichier VoirIl peut s'avérer pratique d'effectuer le listage d'un ou plusieurs répertoires dans un fichier, afin de tenir par exemple un catalogue de fichiers. Sous MS-Dos (ou sous Windows en ouvrant une fenêtre d'invite de commande MS-Dos) il est possible...
Javascript - Manipulation des contrôles clavier VoirManipulation des contrôles clavier Cette astuce a pour but de vous faire découvrir la (ou du moins une) manière de contrôler les évènements clavier en javascript. Cela vous permettra de contrôler/attribuer les/des comportements particuliers à...
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...
Javascript - l'objet Array VoirLes particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si...
Javascript - Introduction au langage Javascript VoirQu'est-ce que le Javascript? Le Javascript est un langage de script incorporé dans un document HTML. Historiquement il s'agit même du premier langage de script pour le Web. Ce langage est un langage de programmation qui permet d'apporter des...

1

Templier Nocturne, le 22 jan 2009 à 23:45:24

Ben j'apprend tout comme toi (enfin je pense) mais est-ce que un truc du genre

if option = x

then ...

Répondre à Templier Nocturne

3

momo_72, le 23 jan 2009 à 10:09:49

Merci pour la réponse Templier. Cela dit, ça ne m'avance pas trop. A bientôt,

Répondre à momo_72

2

Marco la baraque, le 22 jan 2009 à 23:58:43

Bonsoir,
Ce que tu souhaites faire, c'est un composant qui est souvent utilisé (je crois qu'on appelle ça des listes liées ou un truc du genre).
En général, tu as simplement 2 listes, et le choix d'un item dans la première liste détermine les items qui seront présents dans la seconde.

Si tu veux le réaliser toi-même, ce n'est pas très compliqué. Je te mets sur la voie :

Première solution (pas terrible) :

Tu définis 2 tableaux en javascript. Le premier est la liste de tous les choix possibles de ta liste 1. Le second est un tableau associatif : à chaque valeur du tableau 1, tu associes un tableau correspondant aux choix que tu auras dans la liste 2.
Avantage : pas d'aller-retour serveur
Inconvénients : pas très modulaire, tableau définis "en dur" dans le code : pas très maintenable

Seconde solution (mieux selon moi) :
Tu définis ta liste 1 côté serveur (en php par exemple). Tu crées ta page dynamiquement grâce à cette liste 1. Quand tu sélectionnes une valeur de cette liste, tu appelles une fonction javascript. Cette fonction exécute une XmlHttpRequest qui va te chercher la liste des items qui vont être affichés dans la liste 2.
Avantages : maintenable car tu peux très bien définir tes listes dans des fichiers de configuration... les modifier à souhaite avec un code générique
Inconvénient : l'aller-retour au serveur (mais bon, c'est le prix à payer pour avoir une bonne application :D)

Cordialement rtfm and jfgi
Simple "merci" makes helping people happy :)

Répondre à Marco la baraque

4

momo_72, le 23 jan 2009 à 10:11:55

Merci Marco,

Je me penche plutôt pour la solution N° 1, je vais essayer de coder tout ça et si je te contacterai au cas où j'aurai un problème ;-)

Répondre à momo_72

5

momo_72, le 23 jan 2009 à 19:05:37

Salut Marco,

Comme je disais, je n'ai que quelques notions rudimentaires en javascript et j'apprends sur le tas. J'ai opté pour la 1ère solution que tu as proposée. Je peux construire les 2 tableaux (1 pour la 1ère liste et 1 associatif pour les listes correspondantes à chaque élément de 1er tableau) mais je ne vois pas comment les afficher sous forme de listes (<select>), et d'autre part je ne sais pas comment faire en sorte qu'en fonction du choix effectué par l'utilisateur (clic sur un élément de la 1ère liste) la liste correspondante s'affiche (tableau 2). je suis vraiment paumé là! ;-)

STP, donne moi plus de détails!

A+

Répondre à momo_72

6

Marco la baraque, le 23 jan 2009 à 20:13:29

Salut,
Regarde donc ceci :

Fichier index.html :
<html>
	<head>
		<title>Test CCM</title>
		<script type="text/javascript" src="js.js"></script>
	</head>
	
	<body>
		<script type="text/javascript">addLoadEvent(loadList1);</script>
		<form>
			<select id="list1" style="width: 100px;" onChange="loadList2(this.value);">
			</select>
		
			<select id="list2" style="width: 100px;">
			</select>
		</form>
	</body>
</html>

Fichier js.js :
/*Fonction addLoadEvent développée par Simon Willison*/
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

/*Définition des deux tableaux*/
var tab1 = new Array("choix1", "choix2");
var tab2 = new Array();
tab2["choix1"] = new Array("sous-choix1_1", "sous-choix1_2", "sous-choix1_3");
tab2["choix2"] = new Array("sous-choix2_1", "sous-choix2_2", "sous-choix2_3");

/*On remplit la première liste avec les valeurs inscrites dans le tableau 1*/
function loadList1() {
	//on récupère l'élément
	var list1 = document.getElementById("list1");
	for (var i = 0; i < tab1.length; i++) {
		//on crée une nouvelle option
		var item = document.createElement('option');
		item.value = tab1[i];
		item.innerHTML = tab1[i];
		//on ajoute l'option à la liste
		list1.appendChild(item);
	}
	
	//on affiche la liste2 qui correspond au premier élément de la liste1
	if (tab1.length > 0) {
		loadList2(tab1[0]);
	}
}

function loadList2(list1Value) {
	var list2 = document.getElementById("list2");
	//Premièrement on supprime tous les items de la liste
	var toDelete = list2.childNodes;
	while (list2.hasChildNodes()) {
		list2.removeChild(toDelete[0]);
	}
	
	//Ensuite on définit les nouveaux items, ceux qui sont associé à l'élément affiché dans la liste1
	var tab = tab2[list1Value];
	for (var i = 0; i < tab.length; i++) {
		var item = document.createElement('option');
		item.value = tab[i];
		item.innerHTML = tab[i];
		list2.appendChild(item);
	}
}


Cordialement, rtfm and jfgi
Simple "merci" makes helping people happy :)

Répondre à Marco la baraque

7

momo_72, le 23 jan 2009 à 20:36:14

C'est génial!! Je te remercie énormément pour ton aide Marco. C'est ce que je voulais.
Dis-moi, si ça ne t'embête pas j'ai encore un truc à te demander. J'aimerais qu'au départ, l
a List1 soit fixée sur un élément du genre "Faire votre choix" et la List2 désactivée.
C'est à partir du moment où l'utilisateur fait son choix dans List1 que la List2 correspondante apparaît.

Merci encore!

Répondre à momo_72

8

Marco la baraque, le 23 jan 2009 à 21:21:58

Rebonsoir,
Il faut remplacer les fonctions loadList1 et loadList2 par les suivantes :

/*On remplit la première liste avec les valeurs inscrites dans le tableau 1*/
function loadList1() {
	//on récupère l'élément
	var list1 = document.getElementById("list1");
	for (var i = 0; i < tab1.length; i++) {
		//on crée une nouvelle option
		var item = document.createElement('option');
		item.value = tab1[i];
		item.innerHTML = tab1[i];
		
		//si l'option est la première (Veuillez...), alors on la sélectionne par défaut
		if (i == 0) {
			item.selected = true;
		}
		
		//on ajoute l'option à la liste
		list1.appendChild(item);
	}
	
	//on affiche la liste2 qui correspond au premier élément de la liste1
	if (tab1.length > 0) {
		loadList2(tab1[0]);
	}
}

function loadList2(list1Value) {
	var list2 = document.getElementById("list2");

	var toDelete = list2.childNodes;
	var tab = tab2[list1Value];
		
	//Premièrement on supprime tous les items de la liste
	while (list2.hasChildNodes()) {
		list2.removeChild(toDelete[0]);
	}
		
	if (tab) {
		//Ensuite on définit les nouveaux items, ceux qui sont associé à l'élément affiché dans la liste1
		for (var i = 0; i < tab.length; i++) {
			var item = document.createElement('option');
			item.value = tab[i];
			item.innerHTML = tab[i];
			list2.appendChild(item);
		}
		list2.disabled = false;
	}
	else {
		//S'il n'y a aucune entrée pour la valeur dans la liste 1, alors on désactive la liste2
		list2.disabled = true;
	}
}


Cordialement, rtfm and jfgi
Simple "merci" makes helping people happy :)

Répondre à Marco la baraque

9

momo_72, le 23 jan 2009 à 21:34:14

E X C E L L E N T !!! C'est exactement ce que je recherchais depuis des semaines.

Je te dois une fière chandelle :-)

Merci encore pour ton aide.

Cordialement,

Répondre à momo_72

10

puma67000, le 18 mar 2009 à 14:02:56

Pas le tuto mais le contenu du choix se fera comment?

Répondre à puma67000

11

Marco la baraque, le 19 mar 2009 à 00:03:02

Bonsoir,
Regarde le post 6, les listes sont chargées dynamiquement en javascript.

Cordialement, rtfm and jfgi
Simple "merci" makes helping people happy :)

Répondre à Marco la baraque

12

puma67000, le 21 mar 2009 à 00:07:16

Et en français ça donne quoi? le java c'est pas mon domaine

Répondre à puma67000

13

 puma67000, le 21 mar 2009 à 08:23:18

Svp aidez moi à comprendre je débute en js, ça fait 4 jours que je suis sur ma page et je n'arrive pas à faire apparaitre uun texte

Répondre à puma67000
Collection CommentÇaMarche.net