Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Form
Zend_Form Forum d'entraide pour le composant Zend_Form du Zend Framework (création de formulaires, helpers, AJAX etc.). Avant de poster -> FAQ Zend_Form.
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 09/12/2011, 11h39   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 11
Points : 11
Par défaut Boutons radios et JQuery

Bonjour à tous,
J'ai crée un formulaire contenant plusieurs champs ainsi que plusieurs boutons radios.
Lorsque je clique sur un des 4 radios, je voudrais afficher et cacher certains éléments de mon formulaire.
Pour cela, j'ai crée un fichier js qui récupère la valeur du radio selectionné.
Seulement je ne vois pas comment cacher les elements dans le form comme l'image.
Voici mon form:
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
public function init() {
        $this->setName('creation oeuvre');
        $this->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
 
        $radio = new Zend_Form_Element_Radio('radio');
        $radio->setLabel('Type de média')
                ->setMultiOptions(array('Image', 'Son', 'Vidéo', 'Texte'))
                ->setRequired(true)
                ->addFilter('StripTags')
                ->addFilter('StringTrim')
                ->addValidator('NotEmpty');
 
        $image = new Zend_Form_Element_File('média');
        $image->setLabel('Charger une image:')
                ->setRequired(true)
                ->setDestination(APPLICATION_PATH . '/../data/temp')
                ->addValidator('Count', false, 1)
                ->addValidator('Size', false, array('max' => '2097152'))// 2Mo
                ->addValidator('Extension', false, 'jpg,png,gif')
                ->setDescription("Taille maximum: 2Mo / Extensions autorisées: jpg,png,gif");
 
        $titre = new Zend_Form_Element_Text("titre", array('size' => 25));
        $titre->setLabel('Titre du média')
                ->setRequired(true)
                ->addFilter('StripTags')
                ->addFilter('StringTrim')
                ->addValidator('NotEmpty')
                ->addValidator('StringLength', false, 3, 20)
                ->setDescription("Le titre du média doit avoir entre 3 et 20 caracteres alphanumeriques.");
RomJo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 21h32   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Bonjour,
Du moment que tu as un id ou une class à l'élement tu que veux cacher tu peux faire un show ou un hide.

exemple avec un id :
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 21h54   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 11
Points : 11
Justement le problème est là.
L'id de l'élément selectionné, je n'arrive à le récupérer seulement en js.
Il faudrais en js que je retourne la valeur de l'id et que je transmette cette valeur en php.
Mais comment ?
Code :
1
2
3
4
5
6
  $('input[type=radio][name=radio]').click(function getValueRadio () {
            if ($(this).is(':checked')) {
                return $(this).val();
            }else{
                return 1;
            }
Ensuite dans le form, il faudra que j'ajoute une condition...
RomJo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 22h26   #4
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Pourquoi veux tu transmettre a PHP
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 20h59   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 11
Points : 11
C'est ok, j'ai réussi, mais j'ai un code un peu redondant..
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        $('input[type=radio][name=radio]').click(function getValueRadio () {
            if ($(this).is(':checked') && $(this).val() == 4) {                
                $('.id4').show();
                $('.id3').hide();
                $('.id2').hide();
                $('.id1').hide();
            }else if ($(this).val() == 2){                
                $('.id2').show();
                $('.id1').hide();
                $('.id3').hide();
                $('.id4').hide();
            }else if ($(this).val() == 3){                
                $('.id3').show();
                $('.id2').hide();
                $('.id1').hide();
                $('.id4').hide();
            }else{                
                $('.id1').show();
                $('.id2').hide();
                $('.id3').hide();
                $('.id4').hide();
            }
        });
Vous avez une idée pour améliorer celui-ci ?
RomJo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 22h28   #6
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Citation:
Envoyé par RomJo Voir le message
C'est ok, j'ai réussi, mais j'ai un code un peu redondant..
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        $('input[type=radio][name=radio]').click(function getValueRadio () {
            if ($(this).is(':checked') && $(this).val() == 4) {                
                $('.id4').show();
                $('.id3').hide();
                $('.id2').hide();
                $('.id1').hide();
            }else if ($(this).val() == 2){                
                $('.id2').show();
                $('.id1').hide();
                $('.id3').hide();
                $('.id4').hide();
            }else if ($(this).val() == 3){                
                $('.id3').show();
                $('.id2').hide();
                $('.id1').hide();
                $('.id4').hide();
            }else{                
                $('.id1').show();
                $('.id2').hide();
                $('.id3').hide();
                $('.id4').hide();
            }
        });
Vous avez une idée pour améliorer celui-ci ?

et :

Code :
1
2
3
4
5
6
7
8
9
10
        $('input[type=radio][name=radio]').click(function getValueRadio () {
 
            if ($(this).is(':checked')) {      
                $('.id1').hide();
                $('.id2').hide();
                $('.id3').hide();
                $('.id4').hide();
 
                $('.id'+$(this).val()).show();
        });
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 12h16   #7
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
@5h4r : le dernier hide() ne devrait-il pas être un show() ?
Code js :
$('.id'+$(this).val()).show();
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 12h22   #8
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Si si autant pour moi c est modifié.
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2011, 22h17   #9
Candidat au titre de Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 11
Points : 11
Merci, cela fonctionne très bien.
Dès que je sélectionne un bouton radio, un champ texte s'affiche.
J'ai plusieurs boutons radios et donc plusieurs champs textes (visible ou non), et je voudrais ajouter un setrequired(true) dans le champ visible et uniquement celui là.
Comment puis-je faire pour rendre obligatoire uniquement le champ correspondant au radio cliqué?
RomJo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 23h29   #10
Nouveau Membre du Club
 
Avatar de eaglesnipe
 
Homme Yoann Rousseau
Ingénieur Etudes et Développement
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Nom : Homme Yoann Rousseau
Localisation : France

Informations professionnelles :
Activité : Ingénieur Etudes et Développement
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 35
Points : 35
Bonsoir,

Dernière question très intéressante, j'avais rencontré il y a quelques temps le même problème : ne mettre en required que le champ visible parmi plusieurs champs...

La solution que j'avais mis en place à l'époque, et c'est de la grosse bidouille je l'accorde, avait été de laisser à required tous les champs (le visible comme les cachés) mais de mettre une valeur par défaut définie (par exemple default_value) pour l'ensemble des champs cachés (et seulement eux) (à faire donc dans le JS en même temps que les .hide()). Lors de la soumission du formulaire, il n'y a alors plus de problème de validation concernant ces champs puisqu'ils sont renseignés... Dans le PHP ensuite, on se contente d'ignorer (ou de faire un traitement spécifique) sur les champs en question portant cette valeur définie...

Comme je l'ai dit, ça tient plus de la bidouille qu'autre chose, et je suis très curieux de voir si une solution plus élegante existe..
eaglesnipe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 08h53   #11
Membre actif
 
Avatar de shadypierre
 
Inscription : février 2009
Messages : 250
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 250
Points : 197
Points : 197
Tu peux créer une fonction de prévalidation qui en fonction des champs saisi rajoute des setRequired(), etc, puis renvoi vers la fonctions isValid()
shadypierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 12h32   #12
Invité régulier
 
Fred GIROD
Inscription : mars 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Fred GIROD

Informations forums :
Inscription : mars 2010
Messages : 9
Points : 6
Points : 6
Par défaut Précisions...

Bonjour,

Pourrais tu stp RomJo mettre en ligne la partie de ton code concernant ce sujet
(fichier de ton formulaire + fichier javascript) car ayant la même problématique que toi, je n'arrive pas à faire fonctionner le code présent dans la discussion.

D'avance merci
3Fred9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h16.


 
 
 
 
Partenaires

Hébergement Web