Donnez vie à vos documents numériques !
 

Colorer le bouton radio coché

abracadabraPDF Forums PDF – Général Colorer le bouton radio coché

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46462
    Killian
    Participant

    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

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

    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 #

    #68367
    Killian
    Participant

    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 :

    Code:
    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

    #68368
    Merlin
    Maître des clés

    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; i3
    ; i++) {
    if (this.getField(f).isBoxChecked(i)) {
    this.getField(f + “.” + i).fillColor = color.red;
    }
    }

    #68369
    Killian
    Participant

    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 ?

    #68370
    bebarth
    Maître des clés

    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 :

    Code:

    var nbWidgets=this.getField(event.target.name).page.length;
    for (var i=0; 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 :

    Code:
    this.resetForm([“nom du champ”]);

    @+
    :bonjour:

    #68371
    Killian
    Participant

    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 !

    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.

    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…

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