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 32 réponses de 1 à 32 (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:

    #61244
    Ju_MDE
    Membre

    En effet, j’ai été étourdi, je travaille en parallèle sur un autre fichier en faite et j’ai bêtement copier coller le code sans me rendre compte qu’il y avait des boutons que j’avais retiré ce qui semblait créer un conflit.

    En tout cas ça marche parfaitement bien ! Je te remercie !

    Et j’en profite pour poser une question qui devrait être la dernière je l’espère, ça renvoie à une question que je vous ai posé un peu plus tot. Je prend un exemple pour expliciter la chose :

    si je rentre un format de banderole de 1500 x 1000, et que j’indique la quantité 14, un message m’indique que la quantité max pour ce format est de 13, la valeur quantité se remet donc à 13 et la valeur surface se met à 20m2 alors que la surface exacte est de 19,5m2. Pour que cette valeur de surface ce mette à 19,5m2 il faut que je clique sur un autre bouton du formulaire. Du coup j’aurais aimé que cette valeur surface se mette également tout de suite à la bonne valeur sans avoir à cliquer sur un autre bouton si c’est possible OU sinon j’avais pensé créer un bouton “actualiser” qui n’aurait comme seul incidence de permettre à la valeur surface de se remettre à sa juste valeur mais je ne sais pas trop comment m’y prendre.

    Merci encore pour l’aide précieuse !

    #61245
    bebarth
    Maître des clés

    …ça devrait mieux marcher comme ça !
    @+
    :bonjour:

    #61246
    bebarth
    Maître des clés

    bonjour,
    J’ai rajouté un script de document, sinon il y avait un bug si on ré-initialisait les valeurs immédiatement à l’ouverture du fichier….
    @+
    :bonjour:

    #61247
    Ju_MDE
    Membre

    Bonjour,

    Yes ça fonctionne très bien ! :)

    Encore un petit soucis : quand j’ouvre mon document lors de la première action que je réalise une fenêtre s’ouvre et le message d’erreur suivant s’affiche : “la valeur indiquée ne correspond pas au format du champ [prixbanderole]”

    Je vous transmet également les erreurs affichés dans la console :

    ReferenceError: surfUnit is not defined
    2:Field:Calculate
    ReferenceError: surfUnit is not defined
    2:Field:Calculate
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Focus
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Focus
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: surfUnit is not defined
    2:Field:Calculate
    ReferenceError: surfUnit is not defined
    2:Field:Calculate
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter
    ReferenceError: objetJavasript is not defined
    1:Field:Focus
    ReferenceError: surfUnit is not defined
    2:Field:Calculate
    ReferenceError: surfUnit is not defined
    2:Field:Calculate
    ReferenceError: QtMax is not defined
    5:Field:Calculate
    ReferenceError: surfUnit is not defined
    2:Field:Calculate
    ReferenceError: surfUnit is not defined
    2:Field:Calculate
    ReferenceError: surfUnit is not defined
    2:Field:Calculate
    ReferenceError: surfUnit is not defined
    2:Field:Calculate

    Une idée de la ou je dois chercher ? J’avoue que j’ai un peu de mal à comprendre les messages d’erreur de la console, en quoi mes valeurs ne sont pas définis ? :O

    Merci d’avance !

    #61248
    Merlin
    Maître des clés

    ReferenceError: surfUnit is not defined
    2:Field:Calculate

    surfUnit is not defined : la variable nommée surfUnit n’est pas définie.
    2:Field:Calculate : l’erreur se produit dans un ou plusieurs champ (field) à la ligne n°2 du script de calcul (calculate).

    ReferenceError: objetJavasript is not defined
    1:Field:Mouse Enter

    objetJavasript is not defined : la variable nommée objetJavasript n’est pas définie.
    1:Field:Mouse Enter : l’erreur se produit dans un ou plusieurs champ (field) à la ligne n°1 du script “souris entrée” (mouse enter).

    ReferenceError: QtMax is not defined
    5:Field:Calculate

    QtMax is not defined : la variable nommée QtMax n’est pas définie.
    5:Field:Calculate : l’erreur se produit dans un ou plusieurs champ (field) à la ligne n°5 du script de calcul (calculate).

    :idee:

    #61249
    bebarth
    Maître des clés

    bonjour,

    J’ai rajouté un script de document….

    As-tu rajouté le script de document ci-dessous dans ton fichier ?
    var surfUnit=this.getField(“formatlongueur”).value*this.getField(“formathauteur”).value/1000000;

    De mon côté, je n’ai pas de message d’erreur avec mon fichier “Formulaire test_BB2bis.pdf” !
    Tu me dis…
    @+
    :bonjour:

    #61250
    Ju_MDE
    Membre

    Effectivement j’ai oublié de recopier le script de document d’un fichier à l’autre –‘

    Désolé de vous avoir déranger pour si peu et merci encore pour l’aide précieuse !

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