Bonjour à tous.
J'ai un problème sur mon projet Symfony 4, qui utilise Jquery, pour ici afficher et masquer un champ.
J'ai une entité 'avis' qui contient entre autres les champs 'langue' et 'texte'.
Ils sont alimentés à partir d'un formulaire, le champ 'langue' est une liste de choix à partir d'un select distinct des langues déjà en base dans mon entité.
Ce champ 'langue' contient une valeur en plus : 'autre'. Quand cette valeur est sélectionnée dans le liste de choix, ça affiche un champ caché par Jquery, champ 'autrelangue', où on peut saisir une nouvelle langue.
Si ce champ est renseigné, je prends celui ci pour alimenter la langue de mon avis que j'écris en base.
Tout ça, ça marche bien !
Maintenant, j'ajoute des asserts dans mes champs, au niveau de mon entité 'avis'.
Pour 'texte', j'ai mis une longueur max de 10 caractères.
Dans mon formulaire, je sélectionne 'autre' pour langue. Dans le champ 'autrelangue' qui apparaît, je saisis une valeur, et dans le champ 'texte', je saisis plus de 10 caractères.
Je bloque bien sur l'assert du champ 'texte', le champ 'langue' affiche bien 'autre', mais le champ 'autrelangue' est caché.
Impossible de l'afficher quand je bloque sur un assert !!!
Mon entité 'avis' :
Mon contrôleur pour générer 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
14
15
16 /** * @var string * * @ORM\Column(name="langue", type="string", length=200, nullable=false) * @Assert\NotBlank */ private $langue; /** * @var string * * @ORM\Column(name="texte", type="text", length=0, nullable=false) * @Assert\NotBlank * @Assert\Length(max = 10, maxMessage = "Ce champ ne peut pas dépasser {{ limit }} caractères.") */ private $texte;
Mon Jquery pour afficher et cacher mon champ 'autrelangue' :
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
19 ->add('langue', ChoiceType::class, array( 'label' => 'Langue de votre avis', 'choices' => $choicelangue, 'placeholder' => 'Choisissez une langue', 'expanded' => false, 'multiple' => false, 'attr' => array('style' => 'width: 500px') )) ->add('autrelangue', TextType::class, array( 'mapped' => false, 'required' => false, 'label' => 'Saisissez la langue de votre avis', 'label_attr' => array('id' => 'autrelanguelabel'), 'attr' => array('style' => 'width: 500px') )) ->add('texte', TextareaType::class, array( 'label' => 'Texte', 'attr' => array('style' => 'width: 500px') ))
Code js : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 $(document).ready(function() { alert("titi"); $("#form_langue").change(function() { if ($("#form_langue").val() == "autre"){ $("#form_autrelangue").show(); $("#autrelanguelabel").show(); }else{ $("#form_autrelangue").hide(); $("#autrelanguelabel").hide(); } }); });
Le code ci dessus fonctionne toujours !
Sauf le alert("titi") qui ne s'affiche jamais.
Après de multiples essais, voilà ce que j'ai trouvé de mieux pour essayer d'afficher mon champ 'autrelangue' :
Code js : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $(window).load(function() { alert("toto"); if ($("#form_langue").val() == "autre"){ $("#form_autrelangue").show(); $("#autrelanguelabel").show(); }else{ $("#form_autrelangue").hide(); $("#autrelanguelabel").hide(); }; });
Et ça ne marche pas.
De plus, le alert("toto") ne s'affiche jamais non plus.
Pourtant ma fonction 'change' en Jquery fonctionne toujours.
Vous avez des idées ?
Et pourquoi je ne vois jamais mes alert (je suis sous Chromium sous Ubuntu) ?
Merci d'avance pour votre aide !
Partager