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 :

Champs formulaire visibles en fonction d'une liste déroulante


Sujet :

jQuery

  1. #1
    Invité
    Invité(e)
    Par défaut Champs formulaire visibles en fonction d'une liste déroulante
    Bonjour,
    J'ai un formulaire html dans lequel j'aimerais que certains champs (input, textarea...) soit visibles et d'autres cachés en fonction d'un choix dans une liste déroulante. J'ai déjà commencé mon script mais je coince au moment de sélectionner en jquery les :input qui on comme data-attribut, la valeur sélectionnée dans ma liste déroulante.

    Voici mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <form method="POST" action="form.php">
    	<input type="text" name="libelle" placeholder="Libelle" />
    	<select name="template">
    		<option value="1">texte</option>
    		<option value="2">image</option>
    		<option value="3">image-texte</option>
    		<option value="4">texte-image</option>
    	</select>
    	<input type="text" class="filter" name="image" data-filter="["image", "texte-image", "image-texte"]" />
            <textarea type="text" class="filter" name="texte" data-filter="["texte", "texte-image", "image-texte"]"></textarea>
    	<input type="submit" value="valider" />
    </form>
    Malgré d'autres recherches sur internet, je n'arrive pas à utiliser un sélecteur qui agit sur l'attribut data-filter en sachant qu'il a plusieurs valeurs.

    Voici mon début de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $('select[name=template]').change(function(){
    	var filter = $(this).find($('select[name=template] option:selected')).text();
    	console.log(filter);
     
    	//Jusqu'ici ça marche
    });
    Après je sais pas comment faire pour cacher avec la fonction hide() tous les champs :input qui on dans leur attribut data-filter la chaine contenue dans la variable filter.

    J'espère vous avoir donné assez de précision pour m'aider, merci d'avance !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <form method="POST" action="form.php">
    	<input type="text" name="libelle" placeholder="Libelle" />
    	<select name="template">
    		   <option value="1">texte</option>
    				   <option value="2">image</option>
    				   <option value="3">image-texte</option>
    				   <option value="4">texte-image</option>
    	</select>
    	<input type="text" class="filter" name="image" data-filter="image,image-texte,texte-image" />
    <textarea type="text" class="filter" name="texte" data-filter="texte,image-texte,texte-image"></textarea>
    	<input type="submit" value="valider" />
    </form>
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $('select[name=template]').on('change',function(){
    	var filter = $('select[name=template] option:selected').text();
      $('input, select, textarea').each(function(){
         var datas = $(this).attr('data-filter');
         if( datas ){
            if( $.inArray( filter, datas.split(',') ) ){
              $(this).show();
            } else {
              $(this).hide();
            }
         }
      });
    });
    Ou, en utilisant les value au lieu du texte :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <form method="POST" action="form.php">
    	<input type="text" name="libelle" placeholder="Libelle" />
    	<select name="template">
    		   <option value="1">texte</option>
    		   <option value="2">image</option>
    		   <option value="3">image-texte</option>
    		   <option value="4">texte-image</option>
    	</select>
    	<input type="text" class="filter" name="image" data-filter="2,3,4" />
    <textarea type="text" class="filter" name="texte" data-filter="1,3,4"></textarea>
    	<input type="submit" value="valider" />
    </form>
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $('select[name=template]').on('change',function(){
    	var filter = $('select[name=template] option:selected').val();
      $('input, select, textarea').each(function(){
         var datas = $(this).attr('data-filter');
         if( datas ){
            if( $.inArray( filter, datas.split(',') ) ){
              $(this).show();
            } else {
              $(this).hide();
            }
         }
      });
    });

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci jreaux62, je viens de tester ton code et il marche (à moitié).
    Tu peux regarder sur le lien suivant et tester le formulaire, tu verras que au lieu de me sortir le champ "texte", il me sort le champ "image" et inversement.

    https://jsfiddle.net/hxgcqmjc/

    Merci encore pour ton aide !

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Il suffit d'inverser hide() et show() : https://jsfiddle.net/hxgcqmjc/1/

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Oui j'ai bien essayé auparavant, mais du coup le choix de "texte-image" ou "image-texte" ne marche pas.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Utilise la version avec les value.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponses, sujet résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/12/2014, 16h12
  2. [AC-2007] Sous-formulaire variable en fonction d'une liste déroulante
    Par carlito0205 dans le forum IHM
    Réponses: 9
    Dernier message: 05/07/2011, 09h30
  3. Réponses: 1
    Dernier message: 09/10/2009, 09h45
  4. [MySQL] afficher des champs d'un formulaire en fonction d'une liste déroulante
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 08/10/2009, 12h31
  5. mise à jour de champs en fonction d'une liste déroulante
    Par kifouillou dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 09/04/2008, 16h37

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