Mon code Javascript pour des listes dynamiques

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mon code Javascript pour des listes dynamiques

par Cyrano » 04 oct. 2006, 07:08

Il faut adapter selon le besoin;
pour des petites listes, la formule optgroup peut se révéler en effet suffisante. Pour des listes plus longues, comme l'exemple du tuto avec des régions et des départements, le système avec JavaScript est tout à fait adapté. Mais si par exemple sur ce même exemple on voulait rajouter les communes, il faudrait songer à la formule Ajax parce que le tableau généré serait trop lourd et le premier chargement de la page prendrait trop de temps

Mais comme tu sembles l'avoir noté, des connaissances en JavaScript sont indispensables. Ce n'est pas forcément ce qu'il y a de plus difficile à apprendre. Si tu arrives à programmer en PHP, dis-toi que ce n'est pas nécessairement plus compliqué en JavaScript, mais la syntaxe est différente et le vocabulaire est propre à chaque langage. Il y a également une autre contrainte, c'est la compatibilité avec les différents navigateurs qu'on a pas avec le PHP puisque ce dernier est exécuté sur un seul et unique serveur.

par Tatiana » 04 oct. 2006, 06:25

Merci encore! :D

Savez-vous quoi, j'ai réalisé qu'il y existait une option html "optgroup" qui pouvait aussi faire l'affaire étant donné que ma liste ne sera pas si longue! :D

J'ai bien l'intention de me mettre au Javascript quand j'aurai terminé mon projet, d'ailleurs je tenterai peut-être d'implanter ce tutoriel dans mon projet éventuellement étant donné que je crois que les listes dynamiques seraient quand même l'idéal, même si les optgroups sont très bien aussi (et surtout tellement plus simples! :lol: ). Mais actuellement, j'ai tellement passé de temps sur ce problème (avant de créer ce sujet) que j'en ai un peu marre de me concentrer là-dessus.

J'essaierai peut-être même la version PHP. J'aime mieux éviter le Javascript autant que possible (je me trompe peut-être, mais il me semble que ça ne fonctionne pas toujours de la même façon selon les navigateurs et l'utilisateur peut le désactiver).

par Cyrano » 02 oct. 2006, 11:33

Merci pour ma signature ;)

En fait le principe exposé dans le tuto es dans son ensemble relativement simple :
- coté serveur, tu as une interrogation de la base pour générer un tableau indexé multidimensionnel avec l'enemble des données, tableau qui est ensuite linearisé (serialize()) et affecté à une varibale JavaScript;
- coté client, le tableau linearisé est traité pour être transformé en tableau indexé JavaScript
- Ensuite un gestionnaire d'évènement dans la première liste récupère les informations correspondantes pour la seconde liste dans ce tableau et génère la seconde liste ou la met à jour.

Tous les détails nécessaires sont dans le tuto, soit dans le texte, soit dans les commentaires du code.

par Tatiana » 02 oct. 2006, 09:01

Oui, je l'ai vu, mais à le regarder comme ça, ce n'est pas évident de déterminer si ça va fonctionner même si mes "values" ne correspondent pas entre mes deux listes.

Mais puisque tu me le proposes, je suppose que ça veut dire qu'il n'y aura pas de problème de ce côté-là, alors je vais tenter de l'implanter! ;) J'ai déjà travaillé sur plusieurs approches pour finalement me rendre compte que je n'arrivais pas à les faire fonctionner à cause de ce problème-là, alors c'est pour ça que je demandais, car ça m'a pris un temps fou! :( Merci! :D

J'adore ta signature, au fait! :lol:

par Cyrano » 02 oct. 2006, 08:16

As-tu regardé ce sujet dans la FAQ ?

Mon code Javascript pour des listes dynamiques

par Tatiana » 01 oct. 2006, 23:56

Bonjour,

Je suis vraiment nulle en Javascript. J'ai fait une recherche, je sais qu'il y a eu d'autres topics sur le sujet, mais ça ne me semblait pas convenir.

Voici mon besoin: j'ai deux listes, une pour des concours et une pour des compétitions. Chaque concours a ses compétitions particulières, d'où mon besoin d'un lien entre les deux listes.

J'ai également besoin de récolter la valeur ("value") des deux sélections une fois que le formulaire sera soumis, et par conséquent ces valeurs n'iront pas dans l'ordre 1,2,3,4,..

Je veux qu'à tout le moins l'option 0 de ma première liste soit "vide" pour obliger l'utilisateur à faire défiler la liste.

J'ai écrit mon code Javascript à partir de php. Je ne vous donne pas mon code PHP, seulement le code Javascript que ça m'a donné. J'avais essayé de faire la méthode pour faire la mise à jour, mais je me rends compte que parce que mes indices de tab_competitions ne correspondent pas aux valeurs des options de la première liste, je n'arrive pas à faire le lien entre les deux.

Avez-vous des suggestions? Je sais que le code suivant serait probablement facile à faire fonctionner s'il ne s'agissait que de le faire fonctionner tel quel, mais comme il est généré dynamiquement est que les numéros ne seront pas toujours les mêmes, je dois en tenir compte.

Code : Tout sélectionner

<html> <head> <title>Test</title> <script type="text/javascript" language="javascript"> tab_competitions = new Array(2); tab_competitions[0] = new Array (new Option("---------- Pas de concours sélectionné ----------","0") ); tab_competitions[1] = new Array( new Option("---------- Pas de concours sélectionné ----------", "0"), new Option("Peinture", "1"), new Option("Sculpture", "3"), new Option("Dessin", "5") ); tab_competitions[2] = new Array( new Option("---------- Pas de concours sélectionné ----------", "0"), new Option("Cyclisme", "7") new Option("Course à pied", "8") ); function majListe(select1,select2) { } </script> </head> <body> <form> <select name="predictions_concours" onchange="majListe(this.form.predictions_concours,this.form.predictions_competitions)"> <option value="0" selected>---------- Sélectionnez un concours ----------</option> <option value="2">Arts plastiques</option> <option value="3">Sports</option> </select> <select name="predictions_competitions"> <option value="0" selected>---------- Pas de concours sélectionné ----------</option> </select> </form> </body> </html>
(En passant, ce ne seront pas les vrais noms des options, je les ai juste inscrits ici à titre d'exemple pour que ce soit plus clair! :lol: )