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

Symfony PHP Discussion :

Afficher un text input dans un form si une checkbox est sélectionnée


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Afficher un text input dans un form si une checkbox est sélectionnée
    Bonjour
    Pour faire simple, j'ai un form avec une question du type "comment avez vous entendu parler de nous ?" et les réponses possibles sont des checkbox. J'aimerai que si l'utilisateur sélectionne "autre", un text input apparaisse instantanément. J'ai regardé la doc de symfony qui propose des solutions grâce à twig :
    Nom : chrome_uIQH24l0Bq.png
Affichages : 1357
Taille : 10,8 Ko
    mais cette solution ne fonctionne pas ..
    Aussi, je ne connais pas du tout javascript donc le peu de solutions l'utilisant que j'ai testées étaient de simples copier coller...
    Voilà le code du champs de mon form auquel je veux appliquer celà :
    Code : 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
    ->add('provenances', ChoiceType::class, [
                    'expanded' => true,
                    'multiple' => true,
                    'label' => 'Comment avez-vous entendu parler
                                de la journée portes ouvertes ?',
                    'choices' => [
                        'Forum des métiers, salons (Studyrama..)' => 'forum',
                        'Entourage/Proches' => 'proche',
                        'Etudiant actuel/ancien' => 'etudiant_actuel/ancien',
                        'Etablissement d’origine' => 'ecole',
                        'Presse' => 'presse',
                        'Site Web de l’IUT' => 'site',
                        'Internet' => 'internet',
                        'Facebook' => 'facebook',
                        'Linkedin' => 'linkedin',
                        'Autre' => 'autre',
                    ],
                ])

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Salut,
    rapidement, un peu de théorie pour que tu comprennes bien ce qui se passe : PHP tourne sur un serveur HTTP qui est probablement Apache (plus rarement Nginx).
    Ce que savent produire les serveurs HTTP, c’est du texte et uniquement du texte. Du code HTML ? Du code JavaScript ? Tout ça c’est juste du texte statique du point de vue du « tuyau » HTTP.

    Sauf gros bug, le code PHP n’est jamais envoyé côté client. PHP produit du texte, qui est envoyé par le serveur. Pour voir le code reçu par ton navigateur, utilise la commande Ctrl+U (afficher le code source de la page), tu verras que c’est uniquement du code HTML (avec éventuellement du CSS et du JavaScript). Entraîne-toi à voir la correspondance entre du code twig (côté serveur) et le code HTML généré (côté client).

    Dans un scénario classique, une fois que le navigateur a reçu le texte HTML et a commencé à l’interpréter, le script PHP est déjà terminé. Ainsi, PHP ne peut pas agir dynamiquement sur le contenu d’une page web. C’est pour ça que la solution twig que tu as trouvée ne fonctionne pas.

    De manière générale, dès que tu as besoin d’ajouter du comportement à une page, de la rendre interactive, tu as besoin de JavaScript.

    Pour afficher ton champ de texte, tu as deux solutions :
    • soit tu le fais générer par le serveur mais il est masqué au départ, et sera juste révélé par JavaScript ;
    • soit tu le crées via JavaScript.

    La première solution me semble plus simple.

    Dans les grandes lignes, tu dois faire ceci dans ton code JavaScript :
    1. obtenir une référence sur la checkbox « autres »
    2. obtenir une référence sur le champ à afficher / masquer
    3. écouter l’évènement change de la checkbox
    4. dans la fonction de change, consulter la propriété checked de la checkbox, et changer le style CSS display du champ


    Pour les points 1 et 2, le plus simple est de leur ajouter un attribut id. Dans le cas de la checkbox, il faut ajouter un item 'choice_attr' à la déclaration, comme ceci :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ->add('provenances', ChoiceType::class, [
                    ...
                    ...
                    ...
                    'choice_attr' => [
                      'Autre' => ['id' => 'checkbox-autre'],
                    ],
                ])

    Du moins c’est la théorie, je n’ai pas d’installation Symfony sous la main donc je ne peux pas vérifier ce que j’avance. Si ça ne marche pas, tu devras sans doute utiliser une fonction comme dans la doc (d’ailleurs, je trouve que l’exemple de choice_label est plus parlant que celui de choice_attr pour ce qu’on veut faire).

    Dans le code JS, tu utiliseras la fonction getElementById.

    Voici une ébauche de code JS pour t’inspirer :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    "use strict";
     
    let checkbox = document.getElementById("checkbox-autre");
    let champ = document.getElementById("id-du-champ");
     
    checkbox.addEventListener("change", function () {
      if (this.checked) {
        champ.style.display = "block";
      }
      else {
        champ.style.display = "none";
      }
    });

    Pour le champ, tu voudras peut-être l’encapsuler dans un bloc avec d’autres infomations (notamment un label), mais la méthode est la même : affiche / masque le bloc entier au lieu de seulement le champ.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut MERCI
    Merci beaucoup pour votre réponse très précise
    Je vais essayer ça

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    J'ai réussi en faisant ça :


    ```

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     function txtInput() {
            // Get the checkbox
            var checkBox = document.getElementById("form_info_gim_motifs_5");
            // Get the output text
            var text = document.getElementById("text");
     
            // If the checkbox is checked, display the output text
            if (checkBox.checked == true) {
                text.style.display = "block";
            } else {
                text.style.display = "none";
            }
        }
    ```

    Par contre, une fois que je submit le form, les données des cases à cocher ou celles du text input ne sont pas ajoutées à la Base de donnée

Discussions similaires

  1. Comment afficher un document Word dans un form
    Par Pg043 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 01/10/2009, 10h15
  2. Problème pour afficher du texte modifié dans un JLabel
    Par Gordon Freeman dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 03/06/2009, 15h25
  3. comment je peux afficher un document word dans un form
    Par sanach dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/03/2008, 10h14
  4. [Tableaux] afficher un texte contenu dans un tableau
    Par liverbird dans le forum Langage
    Réponses: 2
    Dernier message: 04/07/2007, 16h41
  5. [Forms]text item dans oracle forms
    Par jamjam19 dans le forum Forms
    Réponses: 2
    Dernier message: 04/05/2006, 18h30

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