Donnez vie à vos documents numériques !
 

Menu déroulant variant selon le choix d’un bouton radio

abracadabraPDF Forums PDF – Général Menu déroulant variant selon le choix d’un bouton radio

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45481
    Ju_MDE
    Membre

    Bonjour,

    Je suis à nouveau confronté à un petit souci qui n’a plus grand chose à voir avec le précédent,

    En fait, j’aimerais que les valeurs d’un menu déroulant varient selon le choix d’un bouton radio.

    Dans le genre :

    Si bouton radio 1 coché => menu déroulant composé des valeurs 1,2,3

    Si bouton radio 2 coché => menu déroulant composé des valeurs 4,5,6

    Si bouton radio 3 coché => menu déroulant composé des valeurs 7,8,9

    Après quelques recherches je suis tombé sur ce site http://www.thelin.net/laurent/labo/js/listesderoulantes.html qui semble correspondre à ma demande, je suis donc parti de ces éléments pour essayer de « bricoler » entre l’exemple et mon code mais malgré mes nombreux essais j’ai toujours des messages d’erreur.

    Quelqu’un pourrait il me mettre sur la bonne voie en ce qui concerne la structure de code à utiliser ?

    Merci d’avance pour votre aide,

    à bientôt.

Affichage de 25 réponses de 1 à 25 (sur un total de 32)
  • Auteur
    Réponses
  • #61219
    Merlin
    Maître des clés

    Bonjour.

    Le plus simple c’est de créer 3 menus déroulants, de les superposer, et de les masquer-afficher un seul à la fois en fonction du choix effectué dans les boutons.

    A placer dans chacun des boutons-radio, en action souris-relevée :

    Code:
    if (event.target.value != « Off »)  // si le bouton est coché
    {
    this.getField(« menu »).display = display.hidden; // on masque tous les menus
    this.getField(« menu.1 »).display = display.visible; // on n’affiche que le menu concerné
    }

    Où les champs « menu » sont nommés menu.0, menu.1, etc.
    Il n’y a qu’à changer le numéro du menu dans le script dans chacun des boutons-radio.

    #61220
    Ju_MDE
    Membre

    Yes au niveau du principe c’est exactement ça, le problème qui persiste est que lorsque je règle les options de menu.0, menu.1 et menu.2 ils sont dépendant entre eux. En gros les 3 menu déroulant sont composé des mêmes options disons a,b,c alors que pour le menu.0 j’aimerais les choix a,b,c, le menu.1 d,e,f et le menu.2 g,h,i. Est ce que j’ai oublié quelque chose ? Je m’y prend mal quelque part ?

    #61221
    Merlin
    Maître des clés

    Comme on dit souvent : un dessin (au format PDF) vaut mieux qu’un long discours.
    Ci-joint.  :Smiley03:

    #61222
    Ju_MDE
    Membre

    En effet, mega claire avec un dessin ! Visiblement, j’avais un petit soucis au niveau des noms de mes différents menu déroulant !

    Merci beaucoup !

    Pour continuer je donne une valeur d’exportation à chacune des options de mes 3 menus déroulants et je souhaiterais afficher cette valeur d’exportation dans une case. Pour cela, j’exprimer une condition si bouton radio 0 coché alors le chiffre indiqué dans cette case est égal à la valeur d’exportation du menu.0, etc. pour le menu.1 et menu.2.

    J’ai essayé de « traduire » cette condition en code ce qui me donne :

    Code:
    if (this.getField(« formataffiche.0 »).display = « Off »)  // si le bouton est coché
    {
    this.event.target.value = (this.getField(« quantite.0 »).value)
    }
    if (this.getField(« formataffiche.1 »).display = « Off »)  // si le bouton est coché
    {
    this.event.target.value = (this.getField(« quantite.1 »).value)
    }
    if (this.getField(« formataffiche.2 »).display = « Off »)  // si le bouton est coché
    {
    this.event.target.value = (this.getField(« quantite.2 »).value)
    }

    « formataffiche » correspond à mes boutons radios
    « quantite » correspond à mes menus déroulant

    J’étais assez confiant mais visiblement cela ne fonctionne pas, une idée de ce que je fais de travers ?

    Merci d’avance, à bientôt !

    #61223
    bebarth
    Maître des clés

    bonjour,
    pour ce qui est de ton script, voici ce qu’il faudrait écrire en script de calcul :

    Code:
    if (this.getField(« formataffiche »).value == « A ») this.event.target.value = this.getField(« quantite.0 »).value;
    if (this.getField(« formataffiche »).value == « B ») this.event.target.value = this.getField(« quantite.1 »).value;
    if (this.getField(« formataffiche »).value == « C ») this.event.target.value = this.getField(« quantite.2 »).value;

    …mais perso je préfère :

    Code:
    switch (this.getField(« formataffiche »).value) {
        case « A »:
            this.event.target.value = this.getField(« quantite.0 »).value;
            break;
        case « B »:
            this.event.target.value = this.getField(« quantite.1 »).value;
            break;
        case « C »:
            this.event.target.value = this.getField(« quantite.2 »).value;
    }

    @+
    :bonjour:

    #61224
    Ju_MDE
    Membre

    Ok génial ça fonctionne, je me rapproche du but !

    Je peux continuer à étaler mes différents problèmes sur ce topic ?

    Je vous joint une partie du formulaire, en pièce jointe, sur lequel je travaille. Ce fichier illustre les 2 petits derniers soucis (je l’espère) que je rencontre.

    Tout d’abord, j’ai repris la méthode que vous m’avez présentez pour cacher les menus déroulant, que j’ai voulu adapter à la grosse case à cocher à gauche qui est censé caché tout les autres menus/boutons, j’ai fais cette même démarche sur d’autre boutons et ça fonctionnait sans soucis, par contre là ça ne veut pas, j’ignore pourquoi.

    Et ensuite j’aimerais trouver une solution pour que si la personne qui remplie le formulaire, rentre une quantité ou un format qui dépassera 20m2 de surface, le prix cesse d’évoluer.
    Actuellement lorsque l’on met une quantité trop grande, la surface reste bloquer à 20m2 mais le prix continue à se calculer pour une surface plus élevé, je sais pas si j’ai étais très clair sur ce dernier point, n’hésitez pas à me demander des informations supplémentaires si besoin.

    Encore merci !

    #61225
    bebarth
    Maître des clés

    bonjour,
    Pour le problème concernant le bouton, je te conseille d’utiliser la console. Tu aurais (certainement) vu qu’il y a une erreur de dénomination du champ « formatlongueur » et que le champ « envoyerbanderole » n’existe pas !
    Pour le second problème, je te propose de créer un autre champ « Surface facturée » (ou juste une variable) qui reste égale à 20 m2 si la surface totale est supérieure, et de calculer le prix en fonction de cette surface…
    @+
    :bonjour:

    #61226
    Ju_MDE
    Membre

    Génial j’ai appris qu’il y avait une console (ça paraissait logique en même temps, j’aurais pu y penser plus tôt)  :mur:

    Ok très bien je vais opter pour la variable, c’est tip-top ! J’aimerais essayer de réaliser le même principe pour la quantité aussi, si la surface bloque à 20m2, la quantité bloque également à la valeur correspondante, je vais tenté de l’adapter ce soir mais pour palier à un éventuel échec le fait que ce soit une cellule qui ne soit pas en lecture seul (contrairement à la surface) change quelque chose à la manip ?

    #61227
    Merlin
    Maître des clés
    #61228
    bebarth
    Maître des clés

    … si la surface bloque à 20m2, la quantité bloque également à la valeur correspondante…

    Euhhhhhh, là j’ai pas compris !!!
    @+
    :bonjour:

    #61229
    Ju_MDE
    Membre

    Hello,

    Oui c’était pas très clair de ma part, je vais donner une exemple :

    Je rentre en dimension 1000 x 1000 mm (ce qui nous donne 1 m2)

    Je rentre une quantité de 20,

    Ce qui me donne une surface de 20 m2 et le prix correspond donc à cette surface

    Par contre, si je rentre une quantité de 21, la surface reste à 20m2 (ce que je souhaite), le prix correspond également à cette surface mais la quantité reste à 21 alors que la surface et le prix est calculée pour 20. Or j’aimerais bien trouver un moyen pour que si la surface dépasse les 20m2, la quantité revienne au dernier chiffre permettant de rester en dessous des 20m2. Ca me semble plutôt compliqué vue mon niveau de programmation. Voila pourquoi je me tourne vers vous.

    J’espère avoir été un peu plus clair :)

    à bientôt.

    #61230
    Merlin
    Maître des clés

    Veux tu dire qu’au-delà de 20 m2 le prix doit rester constant ?
    :Euuuh:  :doute:

    #61231
    Ju_MDE
    Membre

    Hum non ça c’est déjà le cas normalement.

    Mais si la case surface dépasse les 20m2, c’est que la valeur indiqué dans quantité est trop grande.

    Pour le moment, lorsque la surface est trop grande la valeur se bloque à 20m2, mais garde la valeur de quantité indiqué par la personne qui remplie le formulaire.

    Or je souhaiterais que si une personne indique une quantité qui entraine une surface supérieur à 20m2, la quantité se bloque à la valeur qui permette d’obtenir 20m2 de surface.

    Je sais pas si c’est faisable ou non, j’espère être un peu plus compréhensible cette fois  :Smiley08:

    #61232
    bebarth
    Maître des clés

    bonjour,
    Je te propose un message d’alerte si la quantité est supérieure à la quantité maxi :

    Code:
    var QtMax = Math.floor(20/(this.getField(« formatlongueur »).value*this.getField(« formathauteur »).value/1000000));
    if (this.event.target.value > QtMax) {app.alert({cMsg: »La quantité maxi pour ces dimensions est de « + QtMax+ » exemplaires. », nIcon:2});}

    @+
    :bonjour:

    #61233
    Ju_MDE
    Membre

    Hello,

    Le message d’alerte est intéressant en effet, mais ce serait pas possible en plus, que une fois cette boite de dialogue fermée la quantité se change directement dans la case quantité ? j’ai essayer de rajouter une ligne de code toute simple au code que tu as établis :

    Code:
    if (this.event.target.value > QtMax) {
    this.event.target.value = QtMax}

    Mais j’ai le droit à ce petit message d’erreur :

    InvalidSetError: Propriété Set impossible, incorrecte ou inconnue.
    Field.value:9:Field quantitebanderole:Calculate

    Une idée ? :)

    #61234
    Merlin
    Maître des clés

    A priori je dirais qu’il manque un point-virgule juste avant la dernière accolade…

    #61235
    bebarth
    Maître des clés

    bonsoir,
    C’est parce qu’il faut écrire « event.value = QtMax ». Un grand magicien en chef saura mieux t’expliquer que moi le pourquoi… on peut également l’écrire comme ça dans la condition. Le « this » correspondant à la fenêtre de premier plan, on peut s’en passer s’il n’y a qu’un fichier ouvert :

    var QtMax = Math.floor(20/(this.getField(« formatlongueur »).value*this.getField(« formathauteur »).value/1000000));
    if (event.value > QtMax) {
    app.alert({cMsg: »La quantité maxi pour ces dimensions est de « + QtMax+ » exemplaires. », nIcon:2});
    event.value = QtMax;
    }

    Par contre, la ligne « Surface totale » du le fichier joint ne sert plus à rien !
    @+
    :bonjour:

    #61236
    Merlin
    Maître des clés
    Code:
    C’est parce qu’il faut écrire « event.value = QtMax »

    Je l’avais aussi supputé mais ne connaissant pas tout le contexte j’ai commencé au plus simple.


    event.value
    : c’est la valeur (value) de l’évènement (event) qui vient de se produire, c’est-à-dire la valeur qui vient juste d’être saisie ou calculée.


    event.target.value
    : c’est la valeur (value) déjà/précédemment stockée dans le champ actif (event.target = cible de l’évènement).

    this.getField(« monChamp« ).value
    : c’est la même chose que ci-dessus mais au lieu de s’adresser au champ actif on s’adresse au champ nommé (ça peut être le même).

    #61237
    bebarth
    Maître des clés

    …à ne pas oublier !!!  :bravo:

    Je l’avais aussi supputé…

    ce qui n’est pas du tout vulgaire d’ailleurs !

    @+
    :bonjour:

    #61238
    Ju_MDE
    Membre

    Génial, ça commence vraiment à ressembler à quelque chose !

    Je peux continuer à abuser de votre aide ? J’essaye, lorsque l’on désactive la case à coché situé en haut à gauche, de remettre les valeurs à 0 en plus de cacher les différents éléments, pour cela j’ai tenté de rajouter un petit bout de code sur chaque décompte de prix, du genre :

    Code:
    if(this.getField(« checkbanderole »).value =’On’){
    event.value = 0;}

    le petit soucis c’est que mon bouton « checkbanderole » se désactive tout seul quand le prix change du coup  :Euuuh:

    A bientôt !

    #61239
    bebarth
    Maître des clés

    bonjour,
    Sauf que comme ça, on ne sait pas ou se trouve ce code !!!
    Du moins je ne l’ai pas trouvé dans ton fichier.
    @+
    :bonjour:

    #61240
    Ju_MDE
    Membre

    Bonjour,

    Yes désolé si on repart du fichier que je vous met en pièce jointe, je place mon code dans « prixbanderole » et la… c’est le drame ^^
    Quand je change la quantité, le prix change et la case à coché se décoche.

    j’espère avoir été assez précis.

    Merci !

    #61241
    bebarth
    Maître des clés

    bonjour,
    J’avais pas compris hier, mais aujourd’hui ça va mieux… :geek: …du moins je pense !!!
    Dans le fichier joint les valeurs se réinitialisent à 1 et non à zéro vu que tu as mis des limites.
    Tu me dis si c’est ça !
    @+
    :bonjour:

    ps : en fait j’explique, c’est en masquant les champs que je réinitialise, je ne vais pas vérifier si la case est cochée…

    #61242
    Ju_MDE
    Membre

    Hum même en mettant la limite à 0, lorsque je change la quantité le bouton « checkbanderole » se décoche donc je n’ai pas l’impression que c’est ça hélas :/

    #61243
    bebarth
    Maître des clés

    :Euuuh: Même avec une réinitialisation à 0, tout se passe bien de mon côté !!!
    As-tu essayé avec mon fichier ? la case se décoche ?
    c’est étrange, mon fichier Formulaire test_BB1ter.pdf est indiqué « Téléchargé 0 fois »…  :doute: :doute:
    @+
    :bonjour:

Affichage de 25 réponses de 1 à 25 (sur un total de 32)
  • Vous devez être connecté pour répondre à ce sujet.