Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2011, 11h31   #1
Membre du Club
 
Inscription : janvier 2010
Messages : 205
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 205
Points : 52
Points : 52
Par défaut Bascule des valeurs entre 2 listes de type SELECT

Bonjour,

J'utilise un code permettant de faire passer des éléments d'une première liste de type <select> à une autre liste du même type :

Code :
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
 
<script language="JavaScript" type="text/javascript">
/*<![CDATA[*/
 
/*
Codes originels © DR.
Killeak : corrections pour compatibilite avec IE 6 et 7, Firefox 2 et Safari 2.
*/
/*
  deplacer( liste_depart, liste_arrivee )
  Déplace depuis la liste de départ (argument 1) et à destination de la liste d'arrivée (argument 2) le ou les éléments sélectionnés par l'utilisateur, l'ajout se faisant à la suite des éléments déjà présents dans la liste d'arrivée.
*/
  function deplacer( liste_depart, liste_arrivee )
  {
    for( i = 0; i < liste_depart.options.length; i++ )
    {
      if( liste_depart.options[i].selected && liste_depart.options[i] != "" )
      {
        o = new Option( liste_depart.options[i].text, liste_depart.options[i].value );
        liste_arrivee.options[liste_arrivee.options.length] = o;
        liste_depart.options[i] = null;
        i = i - 1 ;
      }
      else
      {
        // alert( "aucun element selectionne" );
      }
    }
  }
 
 
/*
  soumettre_1liste( liste )
  Au moment de la soumission du formulaire, sélectionne automatiquement toutes les valeurs de la liste donnée indiquée dans l'argument, afin que les valeurs choisies soit récupérées dans le script de traitement.
*/
function soumettre_1liste( liste )
  {
    var listelen = liste.length;
    for( i = 0; i < listelen; i++ )
    {
      liste.options[i].selected = true;
    }
  }
//-->
/*]]>*/
</script>
J'ai dans ma page PHP un formulaire comportant plusieurs champs dont les 2 listes de type select et qui fait appel à la function soumettre_1liste :

Code html :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<form name="export" method="post" OnSubmit="javascript: soumettre_1liste( document.forms[0].choix );" action="">
 
<!--liste de départ-->
<select name="dispo[]" id="dispo" style="width: 210px;" size="16" multiple="multiple" OnDblClick="javascript: deplacer( this.form.dispo, this.form.choix );">
<!--...options value générés dynamiquement par PHP-->
</select>
 
<!--liste de d'arrivée-->
<select name="choix[]" id="choix" style="width: 210px;" size="16" multiple="multiple" OnDblClick="javascript: deplacer( this.form.choix, this.form.dispo );">
</select>
<input type="submit" value="OK"name="btSubmit2" /> 
</form>

Le code JavaScript est fonctionnel et j'arrive à récupérer en PHP les values rapatriées dans la liste d'arrivée. Mais je butte en voulant ajouter un 2eme système de bascule entre 2 select dans mon formulaire :

Code html :
1
2
3
4
5
6
7
8
9
 
<!--liste de départ2-->
<select name="dispo2[]" id="dispo2" style="width: 210px;" size="16" multiple="multiple" OnDblClick="javascript: deplacer( this.form.dispo2, this.form.choix2 );">
<!--...options value générés dynamiquement par PHP-->
</select>
 
<!--liste de d'arrivée2-->
<select name="choix2[]" id="choix2" style="width: 210px;" size="16" multiple="multiple" OnDblClick="javascript: deplacer( this.form.choix2, this.form.dispo2 );">
</select>

Ce 2ème système de bascule fonctionne, mais lors de la soumission du formulaire je n'arrive pas à récupérer en php à la fois les values de la liste d'arrivée1 et celles de liste d'arrivée2. Étant débutant, j'ai essayé de rajouter au niveau du <form> :

Code html :
1
2
 
<form name="export" method="post" OnSubmit="javascript: soumettre_1liste( document.forms[0].choix );" OnSubmit="javascript: soumettre_1liste( document.forms[0].choix2 );"action="">

Mais cela ne marche pas : je ne récupère que les values de la liste d'arrivée1. Si je laisse que le
Code :
OnSubmit="javascript: soumettre_1liste( document.forms[0].choix2 );"
Cette fois-ci je récupère les values de la liste d'arrivée2. Mais comment faire pour récupérer les values des 2 systèmes de bascule ? Merci de votre aide.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 11h36   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
un simple appandChild d'une option dans l'autre liste ...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script type="text/javascript">
function bascule(source, dest){
document.getElementById(dest).appendChild(source.options[source.selectedIndex])
}
</script>
</head>
 
<body>
<select id="one" ondblclick="bascule(this,'two')" size="9">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
</select>
<select id="two" ondblclick="bascule(this,'one')" size="9"></select>
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 14h39   #3
Membre du Club
 
Inscription : janvier 2010
Messages : 205
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 205
Points : 52
Points : 52
Merci beaucoup pour ce code J'ai fait des tests de récupération des values avec PHP, cela fonctionne en rajoutant un name[] et l'attribut "multiple" :

Code html :
<select id="two" name="choix1[]" ondblclick="bascule(this,'one')" multiple="multiple" size="9"></select>

J'aurais 2 questions complémentaires :

1) dans mon 1er code j'avais un bouton "ajouter" (pour basculer une valeur de la liste 1 vers la liste 2) et un bouton "retirer" (pour retirer une valeur de la liste 2 vers la liste 1). Comment adapter ton code pour gérer ces boutons ?

2) J'ai un code PHP qui vérifie après la soumission si tous les champs de mon formulaire ont bien été complétés ou sélectionnés. A défaut mon formulaire se réaffiche pour permettre à l'utilisateur de le compléter. Pour éviter à ce dernier de devoir recommencer la saisie et la sélection des champs, mon code permet de conserver ce qu'il vient de saisir.
Dans le système de bascule actuel, après la soumission du formulaire, les valeurs rapatriées dans la liste de droite ne sont pas conservées, ce qui obligerait l'utilisateur à refaire ses sélections en cas de formulaire incomplet. Existe-t-il un moyen de conserver l'affichage de ces valeurs après la soumission du formulaire ?
Merci pour toute aide complémentaire.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 19h21   #4
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
Citation:
1) dans mon 1er code j'avais un bouton "ajouter" (pour basculer une valeur de la liste 1 vers la liste 2) et un bouton "retirer" (pour retirer une valeur de la liste 2 vers la liste 1). Comment adapter ton code pour gérer ces boutons ?
Question subsidiaire tu bascules quelle option lors du click sur le bouton ??

2) ben après soumission du formulaire les elements nécessaires ) la repartition des options son coté serveur ... gère le en php
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 21h29   #5
Membre du Club
 
Inscription : janvier 2010
Messages : 205
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 205
Points : 52
Points : 52
1) Je voudrais basculer l'option que j'ai précédemment mise en surbrillance en la sélectionnant: je sélectionne l'option 1 dans la liste de gauche puis je clique sur le bouton "ajouter" pour la rapatrier dans la liste de droite. Même principe pour le bouton "retirer". Au final c'est le même effet que le "ondblclick" dans ton code.

2) je vais donc voir du côté du PHP concernant l'affichage des valeurs après la soumission du formulaire. Merci.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 21h55   #6
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 007
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 007
Points : 45 091
Points : 45 091
Pas bien compliqué, le principe reste strictement le même.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script type="text/javascript">
function bascule(sel, dest){
source=document.getElementById(sel)
if(source.value==-1){return false}
document.getElementById(dest).appendChild(source.options[source.selectedIndex])
}
</script>
</head>
 
<body>
<select id="one"  size="9">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
</select>
<input type="button" value=">" onclick="bascule('one','two')"/>
<input type="button" value="<" onclick="bascule('two','one')"/>
<select id="two"  size="9"></select>
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 17h40   #7
Membre du Club
 
Inscription : janvier 2010
Messages : 205
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 205
Points : 52
Points : 52
Merci beaucoup pour ton aide : cela répond absolument à ma problématique.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h10.


 
 
 
 
Partenaires

Hébergement Web