abracadabraPDF › Forums › PDF – Général › Menu déroulant variant selon le choix d’un bouton radio
- Ce sujet est vide.
-
CréateurSujet
-
26 août 2016 à 14:11 #45481
Ju_MDE
MembreBonjour,
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.
-
CréateurSujet
-
AuteurRéponses
-
26 août 2016 à 16:34 #61219
Merlin
Maître des clésBonjour.
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.29 août 2016 à 14:25 #61220Ju_MDE
MembreYes 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 ?
29 août 2016 à 15:47 #61221Merlin
Maître des clésComme on dit souvent : un dessin (au format PDF) vaut mieux qu’un long discours.
Ci-joint. :Smiley03:30 août 2016 à 15:03 #61222Ju_MDE
MembreEn 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éroulantJ’étais assez confiant mais visiblement cela ne fonctionne pas, une idée de ce que je fais de travers ?
Merci d’avance, à bientôt !
31 août 2016 à 06:55 #61223bebarth
Maître des clésbonjour,
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:31 août 2016 à 15:08 #61224Ju_MDE
MembreOk 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 !
1 septembre 2016 à 07:15 #61225bebarth
Maître des clésbonjour,
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:1 septembre 2016 à 15:01 #61226Ju_MDE
MembreGé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 ?
1 septembre 2016 à 16:44 #61227Merlin
Maître des clésGénial j’ai appris qu’il y avait une console
1 septembre 2016 à 17:26 #61228bebarth
Maître des clés… si la surface bloque à 20m2, la quantité bloque également à la valeur correspondante…
Euhhhhhh, là j’ai pas compris !!!
@+
:bonjour:2 septembre 2016 à 10:16 #61229Ju_MDE
MembreHello,
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.
2 septembre 2016 à 11:47 #61230Merlin
Maître des clésVeux tu dire qu’au-delà de 20 m2 le prix doit rester constant ?
:Euuuh: :doute:2 septembre 2016 à 13:32 #61231Ju_MDE
MembreHum 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:
3 septembre 2016 à 11:15 #61232bebarth
Maître des clésbonjour,
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:5 septembre 2016 à 14:39 #61233Ju_MDE
MembreHello,
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:CalculateUne idée ?
5 septembre 2016 à 14:46 #61234Merlin
Maître des clésA priori je dirais qu’il manque un point-virgule juste avant la dernière accolade…
5 septembre 2016 à 20:09 #61235bebarth
Maître des clésbonsoir,
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:6 septembre 2016 à 08:42 #61236Merlin
Maître des clésCode: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).6 septembre 2016 à 14:50 #61237bebarth
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:7 septembre 2016 à 14:58 #61238Ju_MDE
MembreGé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 !
7 septembre 2016 à 16:06 #61239bebarth
Maître des clésbonjour,
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:8 septembre 2016 à 13:13 #61240Ju_MDE
MembreBonjour,
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 !
8 septembre 2016 à 13:19 #61241bebarth
Maître des clésbonjour,
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…
8 septembre 2016 à 13:28 #61242Ju_MDE
MembreHum 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
8 septembre 2016 à 13:40 #61243bebarth
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:8 septembre 2016 à 14:33 #61244Ju_MDE
MembreEn 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 !
8 septembre 2016 à 20:05 #61245bebarth
Maître des clés…ça devrait mieux marcher comme ça !
@+
:bonjour:9 septembre 2016 à 12:14 #61246bebarth
Maître des clésbonjour,
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:13 septembre 2016 à 10:05 #61247Ju_MDE
MembreBonjour,
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:CalculateUne 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 ?
Merci d’avance !
13 septembre 2016 à 10:39 #61248Merlin
Maître des clésReferenceError: surfUnit is not defined
2:Field:CalculatesurfUnit 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 EnterobjetJavasript 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:CalculateQtMax 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:
13 septembre 2016 à 12:01 #61249bebarth
Maître des clésbonjour,
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:13 septembre 2016 à 12:28 #61250Ju_MDE
MembreEffectivement 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 !
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.