abracadabraPDF › Forums › PDF – Général › Si champ vide = non visible et autre affichage conditionnel
- Ce sujet est vide.
- CréateurSujet
- 7 avril 2019 à 21:04 #46044
Patakess
MembreBonjour, ça faisait longtemps o/
Pour un formulaire, je cherche a afficher un champ et le rendre obligatoire si l’âge d’une case est inférieur à 18 (je me sers de l’âge du capitaine pour calculer ça).Après moult recherche et essai, j’ai fait quelque chose comme çaCode:if (event.target.value < 18)
{
this.getField(“nom”).display = display.hidden;
this.getField(“nom”).required = false;
}
else {
this.getField(“nom”).display = display.visible;
this.getField(“nom”).required = true;
}Sauf qu’un problème se pose (sinon je ne serai pas là, comme il faut s’en douter…)
Lorsque le fichier est clean, la zone ne s’affiche pas et n’est pas obligatoire (jusque là tout va bien). MAIS si je mets une date pour que l’âge soit en dessous de 18, rien ne se passe. Par contre, si je fais ça en deux temps. Une première date, puis une autre, là ca fonctionne.Je sèche totalement ><. Help please ><
Merci o/ - CréateurSujet
- AuteurRéponses
- 8 avril 2019 à 07:23 #65581
bebarth
Maître des clésbonjour,
Ton champ age doit être en script de calcul avec le champ en lecture seule.
Voici une adaptation à ton fichier d’un script que j’avais écris pour une autre application.
@+
:bonjour:8 avril 2019 à 07:44 #65582Patakess
MembreBonjour
Merci pour cette réponse. C’était “juste” ça alors ? (j’avoue que je ne sais jamais où il faut placer les scripts ^^”).
Petite question. Il y a t’il moyen que si la case age est vide, alors le champs qui doit apparaitre (ou pas), n’apparaisse pas (et donc ne soit pas obligatoire ?) (en dehors de devoir manuellement à chaque fois remettre la case en invisible).
Encore merci o/
EDIT:
Après quelques tests, je vais préciser un petit peu. Dans les faits, j’ai réussi à faire ce que je demandais au dessus. Sauf que au moment de le mélanger avec une autre condition, ça ne fonctionne plus :doute:
Dans le fichier joint, j’aimerai que la case nom s’affiche donc si l’âge est inférieur à 18 ans ou si la case nom2 contient quelque chose (c’est là que ça coince). J’ai essayais de faire deux scripts séparaient mais ils entraient en conflit. Et un seul, je n’y arrive pas ><. J'arrive à faire l'un du coup (affichage si age < 18) ou l'autre (affichage si case remplie) mais pas les deux en même temps... Encore merci d’avance o/8 avril 2019 à 11:31 #65583Merlin
Maître des clésj’aimerai que la case nom s’affiche donc si l’âge est inférieur à 18 ans ou si la case nom2 contient quelque chose
Code:if (this.getField(“la case âge”).value < 18 || this.getField("la case nom2").value != "") {
// blablabla
}
else {
// blablabla
}Le secret c’est ||, double-barres verticales (ce ne sont pas des “i”) qui signifie “ou”, il y aussi && qui signifie “et”.
Attention || est un “ou paresseux”, ce qui veut dire qu’il s’arrête à la première correspondance quand il y en a plusieurs.:Smiley15:
8 avril 2019 à 11:50 #65584Patakess
MembreBonjour Merlin
J’ai bien utilisé les || pour mon ou. Mon code est le suivant (enfin la partie qui nous intéresse, l’autre étant le code de bebarth qui fonctionne)
Code:var nom3=this.getField(“nom2”);
if (event.target.value==”” || nom3==”” ) {
this.getField(“nom”).display=display.hidden;
this.getField(“nom”).required=false;
} else if (age<18 || isNaN(age) || nom3!="") {
this.getField(“nom”).display=display.visible;
this.getField(“nom”).required=true;
} else {
this.getField(“nom”).display=display.hidden;
this.getField(“nom”).required=false;
}Du coup je suppose que ça doit coincer à cause de l’ordre dans lequel j’ai mis tout ça ?
J’ai également essayé comme ça, plus “direct” mais non plus :Code:if (event.target.value==”” || this.getField(“nom2″).value ==”” ) {
this.getField(“nom”).display=display.hidden;
this.getField(“nom”).required=false;
} else if (age<18 || this.getField("nom2").value!="" || isNaN(age)) {
this.getField(“nom”).display=display.visible;
this.getField(“nom”).required=true;
} else {
this.getField(“nom”).display=display.hidden;
this.getField(“nom”).required=false;
}8 avril 2019 à 12:18 #65585Merlin
Maître des clés1.
var nom3 = this.getField(“nom2“);
Évite absolument ce genre de correspondances trompeuses, il n’y a pas mieux pour s’emmêler les pinceaux et faire des erreurs.
Je l’ai appris à mes dépends. :Smiley11:
Utilise plutôt : var nomDeux = this.getField(“nom2“);2. La logique voudrait qu’on teste d’abord la condition isNaN avant de tester la condition <18.
Comme je disais ci-dessus c’est un “ou” paresseux qui fait les choses dans l’ordre et qui parfois ne va pas jusqu’au bout.3. La fonction isNaN est utilisée à l’envers : (if)is Not a Number = (si)ce n’est pas un chiffre.
Ce que tu veux vérifier c’est que ce soit bien un chiffre, donc l’inverse : !isNaN
Ou bien : if (isNaN(age) == false) mais c’est plus long.4. Trois possibilités sont testées (if, else if, else) alors que deux suffisent :
if ((!isNaN(age) && age<18) || nom3!=””) {
this.getField(“nom”).display = display.visible;
this.getField(“nom”).required = true;
}
else {
this.getField(“nom”).display = display.hidden;
this.getField(“nom”).required = false;
}8 avril 2019 à 13:24 #65586Patakess
Membre1. Oups, en effet. C’est un fichier “crash test” j’avoue, mais autant crasher dans de bonne condition ^^”
2 et 3 Cette partie là du code n’est pas de moi mais de bebarth.Code:if (age<18 || isNaN(age)) {
this.getField(“nom”).display=display.hidden;
this.getField(“nom”).required=false;
} else {
this.getField(“nom”).display=display.visible;
this.getField(“nom”).required=true;
}Il fonctionnait “a l’envers” de ce que je voulais, masquant le champ quand il fallait le montrer et inversement.
4. J’ai essayé du coup le code que tu me donnes et ça ne fonctionne pas chez moi
La case reste toujours visible et obligatoire, quelque soit l’âge.
8 avril 2019 à 14:36 #65587bebarth
Maître des clés…comme ça ??? je n’ai plus suivi !
Code:…
if ((age>18 || isNaN(age) || age != “”) && this.getField(“nom2”).value != “”) {
this.getField(“nom”).display=display.hidden;
this.getField(“nom”).required=false;
} else {
this.getField(“nom”).display=display.visible;
this.getField(“nom”).required=true;
}@+
:bonjour:8 avril 2019 à 15:11 #65588Patakess
MembreDésolé de t’avoir perdu ^^”.
Pas tout à fait. En textuel, ca donnerait
“Si l’âge est supérieur ou égal 18 ans ou si la case nom2 est vide ou si la case age est vide alors ne pas afficher nom et ne pas le rendre obligatoire.”
et du coup l’autre
” si l’age est inférieur à 18 ou si la case nom2 est pleine, alors afficher et rendre obligatoire nom”
J’ai beau essayé de rendre ça en code, ça bloque toujours à un endroit. C’est frustrant x)8 avril 2019 à 17:27 #65589Merlin
Maître des cléssi l’age est inférieur à 18 ou si la case nom2 est pleine
Ce qui nous donne :
Code:if ((!isNaN(age) && age<18) || this.getField("nom2").value != "Off")Pour les cases-à-cocher et les boutons-radio la valeur nulle c’est “Off“. Entre guillemets parce-que c’est une “string”
Il n’y a pas besoin de définir une autre possibilité puisque dans tous les autres cas on fait l’action contraire.
Donc un simple else suffit.Mais si tu partageais ton doc, une partie de ton doc, ou bien une maquette on aurait déjà fini cette discussion.
(Transmettre un lien vers une pièce jointe, volumineuse ou non : Acrobat > menu Fichier > Envoyer le fichier > Envoyer et effectuer le suivi > Créer un lien anonyme)
:Smiley15:8 avril 2019 à 17:54 #65590Patakess
MembreMais je l’ai partagé ^^” dans mon post de 9h44, juste avant ta première réponse ^^”
Je remets le doc (avec un nom différent, vu qu’entre temps j’ai continué à faire joyeusement n’importe quoi ^^”)
8 avril 2019 à 20:20 #65591bebarth
Maître des clés…comme ça alors :
Code:…
if (age>=18 || isNaN(age) || age==”” || this.getField(“nom2″).value==””) {
this.getField(“nom”).display=display.hidden;
this.getField(“nom”).required=false;
} else {
this.getField(“nom”).display=display.visible;
this.getField(“nom”).required=true;
}Moi je n’en suis qu’à _BB2 :geek: !
@+
:bonjour:8 avril 2019 à 20:45 #65592Patakess
MembreJe sais pas pourquoi, mais ca ne fonctionne pas. Quand je reset le fichier, et qu’ensuite je tape une date qui donne un mineur, point de case apparait :doute:
8 avril 2019 à 20:56 #65593Merlin
Maître des clésMais je l’ai partagé ^^” dans mon post de 9h44, juste avant ta première réponse
Tu as raison, le thème de ce forum est buggé, tout à l’heure je ne voyais aucune pièce jointe dans aucun message.
J’avais vérifié avant de demander. :Euuuh:Mais maintenant que je l’ai regardée je me sens encore plus largué sur ce sujet !
:joker:8 avril 2019 à 21:50 #65594Patakess
MembreAh mince, c’est encore plus embêtant alors xD Je vais peut être enlever les pieces jointes :geek:
9 avril 2019 à 08:43 #65595bebarth
Maître des clésbonjour,
Je sais pas pourquoi, mais ca ne fonctionne pas. Quand je reset le fichier, et qu’ensuite je tape une date qui donne un mineur, point de case apparait :doute:
Quand tu “reset le fichier”, toutes les cases sont vide ??? Parce qu’ensuite, il faut quelque chose dans le champ nom2 pour que l’autre champ s’affiche… du moins c’est ce que j’avais compris.
@+
:bonjour: - AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.