Colorer le bouton radio coché  (Lu 318 fois) Partager ce sujet Imprimer

1 B


Killian  30 novembre 2020 : 09:26

Bonjour, je viens vers vous car je souhaiterais colorer le bouton radio sélectionné d'un groupe. J'ai testé le script de cette page qui fonctionne bien, mais il y a un problème avec les boutons radio, c'est qu'il applique la couleur à tout le groupe (en changeant le nom des boutons, le problème reste le même). Comment y remédier ?

Merci

IP archivée


Merlin  30 novembre 2020 : 11:29

Un groupe de cases à cocher ou de boutons-radio est considéré comme un seul champ, c'est ce qui fait tout leur intérêt.
En terminologie JavaScripto-Adobienne une case à cocher (ou un bouton-radio mais je ne vais pas le répéter à chaque fois) prise isolément de son groupe s'appelle un "widget".

Sur la page que tu indiques "event.target" désigne donc le groupe, pour désigner un widget il faut le nommer par son nom de groupe et par son numéro de widget.
Supposons un groupe de cases à cocher nommé "checkbox"
Pour modifier la couleur du 3e widget il faut placer ce script dans toutes les cases du groupe (le compte commence à zéro, donc n-1) :


if (this.getField("checkbox.2").value == "Off") {
   this.getField("checkbox.2").fillColor = color.red;
}
else {
   this.getField("checkbox.2").fillColor = color.green;
}


Le numéro d'ordre des widgets est fonction de l'ordre (croissant) dans lequel ils ont été créés, il n'y a pas moyen de le modifier.
Dans le panneau qui liste les champs le numéro de widget apparait à la suite du nom, après le #

IP archivée


Killian  30 novembre 2020 : 12:12

Merci pour ta réponse Merlin.

Oui je me doutais bien que ça s'appliquait au groupe, mais je ne savais pas comment les contrôler indépendamment, tu viens de m'apprendre le fonctionnement des widgets.

Je viens de tester en appliquant le script sur une groupe de boutons radios. Déjà, il n'y a qu'une seule case qui est modifié à la fois, donc très bien. Par contre, comme ce n'est plus le groupe qui est concerné, en cochant une case, les autres ne sont pas modifiées.

J'ai pensé à une solution : lorsque la case est cliqué, je met tout le groupe en transparent, et ensuite j'applique le vert à ce bouton uniquement :

event.target.fillColor = color.transparent;
this.getField("TEST.0").fillColor = color.green; //si on part du principe que le script est unique à ce bouton
if (this.getField("TEST.0").value == this.getField("TEST.0").value) { //si le script est commun au groupe
   this.getField("TEST.0").fillColor = color.green;
}

Comme ça, ça fonctionne. Je ne sais pas s'il est nécessaire de passer par une condition ou si on peut appliquer directement la couleur du principe que le script est lancé en cliquant sur le bouton. Il y aura quand même une amélioration à faire si elle est possible, qui permettrai de gagner beaucoup de temps : pouvoir appliquer le même script à tout le groupe (voir tout les groupes du document), et plutôt que de passer par un getField, identifier le bouton qui vient d'être cliqué, je ne sais pas si tu vois ce que je veux dire. En gros, même script sur le groupe, et la "colorisation" s'applique au bouton concerné.

Merci

IP archivée


Merlin  30 novembre 2020 : 18:57

OTAN pour moi, j'avais compris que tu voulais colorer une case en particulier, je n'avais pas compris que tu voulais colorer celle qui est cliquée.
Dans ce cas il faudrait utiliser ce script (le même dans toutes les cases du groupe).
L'ennui c'est que je n'ai pas trouvé comment compter le nombre de widgets d'un groupe, donc il faut l'indiquer manuellement.
Par-contre il n'y a pas besoin de préciser le nom du groupe.

Exemple pour un groupe de 3 cases :

var f = event.target.name;
event.target.fillColor = color.green;
for (var i=0; i<3; i++) {
   if (this.getField(f).isBoxChecked(i)) {
      this.getField(f + "." + i).fillColor = color.red;
   }
}

IP archivée


Killian  30 novembre 2020 : 19:33

Merci Merlin, c'est parfait !

Pour le nombre de champs, je ne vois pas non plus comment identifier le nombre de champs, mais en mettant simplement un grand nombre, ça ne génère pas de problème dans le script (même après la boucle, surement grâce au JS).

Juste une dernière chose : quand on efface le formulaire, la couleur n'est du coup pas remise à zéro. Une solution pour remettre les fonds de toutes les cases à cocher et tous les boutons radios en blanc ?

IP archivée


bebarth  30 novembre 2020 : 21:38

bonjour,
Pour le nombre de champs, je ne vois pas non plus comment identifier le nombre de champs, mais en mettant simplement un grand nombre, ça ne génère pas de problème dans le script (même après la boucle, surement grâce au JS).
Pour connaître le nombre de widgets, il faut étudier la propriété "page" du champ. Si c'est un nombre, c'est un champ simple, si c'est une table, la longueur de cette table indique le nombre de widgets. Donc :
...
var nbWidgets=this.getField(event.target.name).page.length;
for (var i=0; i<nbWidgets; i++) {
...
Ensuite, pour éviter d'écrire le même script dans tous les boutons, il vaut mieux en faire une fonction et rappeler cette fonction par tous les boutons. C'est beaucoup plus pratique s'il y a une modification à faire...

Juste une dernière chose : quand on efface le formulaire, la couleur n'est du coup pas remise à zéro. Une solution pour remettre les fonds de toutes les cases à cocher et tous les boutons radios en blanc ?
Essaie de réinitialiser ce champ :
this.resetForm(["nom du champ"]);
@+
 :bonjour:

IP archivée


Killian  30 novembre 2020 : 21:49

Citation de: bebarth
Pour connaître le nombre de widgets, il faut étudier la propriété "page" du champ. Si c'est un nombre, c'est un champ simple, si c'est une table, la longueur de cette table indique le nombre de widgets. Donc :
Ça marche parfaitement !


Citation de: bebarth
Ensuite, pour éviter d'écrire le même script dans tous les boutons, il vaut mieux en faire une fonction et rappeler cette fonction par tous les boutons. C'est beaucoup plus pratique s'il y a une modification à faire...

Oui tout à fait. Comment faut-il faire pour créer une fonction dans tout le document ? Je suppose qu'il faut passer par Scripts JavaScript du document, mais du coup il ne veut pas de event.target.name par exemple.

Citation de: bebarth
Essaie de réinitialiser ce champ :
J'ai essayer d'appliquer ça sur un bouton, bon non ça efface juste la case coché, ça ne touche pas à la couleur de fond. Mais de toutes façons, là je peux simplement indiquer un fond blanc. Le problème, c'est d'appeler toutes les cases du document. S'il faut que je les nomme une par une...

IP archivée