IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Cacher des éléments dans des liste déroulantes liées


Sujet :

jQuery

  1. #1
    Invité
    Invité(e)
    Par défaut Cacher des éléments dans des liste déroulantes liées
    Bonjour,

    je vous explique mon problème:

    j'ai deux listes déroulantes liées, la première représente un "type" (14 éléménts)
    et la deuxième comprend des "detail" (91 éléments) de ces différents "type".

    Lorsque je sélectionne un "type" dans la première j'essai de n'afficher que les"detail" correspondant.
    Le nombre de "detail" par "type" est variable.

    Cela fonctionne bien avec les 4 premiers "type", mais pas avec le reste.
    Je ne vois pas mon erreur et j'ai l’impression qu'il y'a trop d’éléments dans la liste détails pour que mon Jquery fonctionne correctement.

    Voici mon code :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <select name="type" id="type" >
    	<option value="0" selected="selected">None</option>
    	<option value="01">Type A</option>
    	<option value="02">Type B</option>
    	<option value="03">Type C </option>
    ...
    	<option value="14">Type N </option>
    </select>
     
     
    <select name="detail" id="detail" >
    	<option value="0" >None</option>
     
    	<option value="010100" >Detail A.1</option>
    	<option value="010200" >Detail A.2</option>
    	<option value="010300" >Detail A.3</option>
    	<option value="010400" >Detail A.4</option>
     
    	<option value="020100" >Detail B.1</option>
    	<option value="020200" >Detail B.2</option>
    	<option value="020300" >Detail B.3</option>
     
    	<option value="030100" >Detail C.1</option>
    	<option value="030200" >Detail C.2</option>
    	<option value="030300" >Detail C.3</option>
    	<option value="030400" >Detail C.4</option>
    	<option value="030400" >Detail C.5</option>
    ...
    	<option value="140700" >Detail N.8</option>
    </select>

    Code jQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    $(document).ready(function() {
     
        var $index = $('#type');
        var $detail = $('#detail');
     
        // A la sélection d une nouvelle catégorie dans la liste
        $index.on('change', function() {
           var val = $(this).val();
     
           // Cacher ltout les éléments de la liste
           $detail.children().hide();   
     
           if ( val != 0)
           {
        	   $detail.prop('disabled', false);
     
       	   // Selection du premier élément de la liste
        	   $detail.val(val+"0100");
     
       	   // Affichage de la liste détaillé commencent par l'index de la catégorie sélectionné
       	   $detail.children("option[value^=" + val + "]").show();
           }
           else 
           {
        	   $detail.children("option[value=0]").show();
        	   $detail.val(val);
        	   $detail.prop('disabled', true);
           }
        });
    });


    Auriez-vous une idée à me suggerer?
    Une erreur que je ne vois pas?

    Merci
    Dernière modification par Bovino ; 14/03/2014 à 09h21.

  2. #2
    Membre chevronné
    Avatar de la.lune
    Homme Profil pro
    Directeur Technique
    Inscrit en
    Décembre 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Comores

    Informations professionnelles :
    Activité : Directeur Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 545
    Points : 2 084
    Points
    2 084
    Par défaut
    Voici la solution, bon j'ai fais le code à ma manière simple et concis en modifiant ton code, j'ai ajouté un bonus à la fin du code alors que tu n'a pas traité ce cas. Alors tout est commenté, et désolé car je n'ai pas chercher réellement à trouver où était l'erreur dans ton code
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $(document).ready(function() {
        var $index  = $("#type");
        var $detail = $('#detail');
    var resteEstChache=false;
        // A la sélection d une nouvelle catégorie dans la liste
        $index.on('change', function() {
           var aAfficher="option[value^='"+$(this).val()+"']";
            //Il faut ré-afficher ce qui sont déjà cachés dans une étape précédente avant de filtrer
           if(resteEstChache)$detail.children().show();
           // Cacher seulement les consernés et laisser ce qu'on veut
           $detail.children().not(aAfficher).hide();
           resteEstChache=true; 
            //Il faut rafraîchir directement l'option sélectionné apparente
            //par la première option de la liste encours(la liste filtré)
     $detail.find(":selected").text($detail.children().filter(aAfficher).first().text());
        });
    });
    Voir la démonstration

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/05/2013, 09h39
  2. Réponses: 2
    Dernier message: 11/05/2013, 12h19
  3. Réponses: 1
    Dernier message: 02/05/2013, 20h19
  4. [MySQL] Comment afficher des éléments dans une liste déroulante tout en dissimulant un ?
    Par lou87 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/04/2009, 16h45
  5. Réponses: 12
    Dernier message: 08/02/2007, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo