Donnez vie à vos documents numériques !
 

Couleur d’un champ en fonction d’un choix dans une liste déroulante

abracadabraPDF Forums PDF – Général Couleur d’un champ en fonction d’un choix dans une liste déroulante

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45904
    pierremaug
    Membre

    Bonjour,

    Je pensais avoir vu ce sujet sur le forum mais impossible de le retrouver donc désolé par avance si je pose une question déjà abordée.

    Je cherche donc le script qui me permet lorsque que je fais un choix dans une liste déroulante de changer la couleur d’un champ.
    En d’autres termes, j’ai une liste déroulante avec :
    Dispo
    HS

    Quand je choisi “dispo” un certain nombre de champ se colorient en vert.
    Quand je choisi “HS” un certain nombre de champ se colorient en rouge.

    Si je peux en plus ne pas permettre de saisie dans les champs lorsque que je clique sur “HS” se serait top.

    Merci d’avance

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

    Bonjour

    Essaye ça en script de validation, bien entendu il faut d’abord adapter le nom du (ou des) champ ciblé :

    Code:
    if (event.value == “Dispo”) {this.getField(“NOMduCHAMP”).fillColor = color.green;}
    else if (event.value == “HS”) {this.getField(“NOMduCHAMP”).fillColor = color.red;}
    else {this.getField(“NOMduCHAMP”).fillColor = color.transparent;}

    Attention aussi au fait que Dispo est différent de dispo, JavaScript est sensible à la casse.

    #64408
    pierremaug
    Membre

    Merci Merlin,

    Ca fonctionne effectivement. En revanche comment faire pour que la liste ne soit pas bloqué sur un choix ?
    Parce que sinon c’est soit rouge soit vert à l’ouverture du PDF.

    D’autre part, est ce que je peux ajouter une sript qui permette d’empêcher la saisi lorsque mon choix est : HS.

    Fichier en PJ.

    Merci

    #64409
    Merlin
    Maître des clés

    Il suffit d’ajouter une espace dans la liste des items de la liste pour obtenir un item neutre.
    :Smiley15:

    Code:
    if (event.value == “DISPO”) {
        this.getField(“texte”).fillColor = color.green;
        this.getField(“texte”).readonly = false;
    }
    else if (event.value == “HS”) {
        this.getField(“texte”).fillColor = color.red;
        this.getField(“texte”).readonly = true;
    }
    else {
        this.getField(“texte”).fillColor = color.transparent;
        this.getField(“texte”).readonly = false;
    }
    #64410
    pierremaug
    Membre

    Merci Merlin ! Quitte a être chiant…
    Actuellement je peux remplir un champs en mode “DISPO”. Si je me rends compte que c’est “HS”
    Est il possible que le texte préalablement rempli soit effacé ?
    Sinon je suis obligé de re passer en mode DISPO pour pouvoir effacer le texte.

    C’est un détail…

    Merci

    #64411
    Merlin
    Maître des clés

    Il faut ajouter une ligne de script un peu plus complexe, avec une boucle, car la “valeur” d’un champ ne peut pas être une “propriété” commune à toute une génération de champs.
    Voir : https://www.abracadabrapdf.net/?p=525


    if (event.value == “DISPO”) {
        this.getField(“texte”).fillColor = color.green;
        this.getField(“texte”).readonly = false;
    }
    else if (event.value == “HS”) {
        this.getField(“texte”).fillColor = color.red;
        this.getField(“texte”).readonly = true;
        for (var i=0; i<3; i++) {this.getField(“texte.”+i).value = “”;}
    }
    else {
        this.getField(“texte”).fillColor = color.transparent;
        this.getField(“texte”).readonly = false;
    }

    La valeur “3” doit correspondre au nombre de champs texte.n

    #64412
    pierremaug
    Membre

    Parfait merci beaucoup !
    Est ce que c’est vous qui donnez les formations PDF ?
    Je cherche une formation sur Paris.
    merci

    #64413
    Merlin
    Maître des clés

    Oui je suis aussi formateur, mais cette conversation devrait continuer en privé : https://www.abracadabrapdf.net/contact/

    :Smiley15:

    #64414
    pierremaug
    Membre

    Mail envoyé merci !

    #64415
    pierremaug
    Membre

    Je rencontre encore un petit problème…
    J’ai ajouté l’élément “inconnu” dans ma liste déroulante et lorsque je le sélectionne il est censé coloré en orange des champs de texte. Sauf que rien ne se passe.
    Ai je commis une erreur ? Fichier en PJ
    Merci

    D’autre par, il est possible via “exécuter une commande de menu” de créer un bouton “enregistrer sous”.
    Est-il possible d’avoir un bouton qui fasse juste “enregistrer” ? Et partant du principe qu’il enregistre à l’endroit où le fichier a été ouvert.

    Merci

    #64416
    Merlin
    Maître des clés

    Ai je commis une erreur ?

    Il faut remplacer :

    else if (event.value == “INCONNU”) {
        this.getField(“VOIE8”).fillColor = [“RGB”,(
    0/255),(139/255),(203/255)];

    Par :

    else if (event.value == “INCONNU”) {
        this.getField(“VOIE8”).fillColor = [“RGB”,(
    1/255),(139/255),(203/255)];

    Est-il possible d’avoir un bouton qui fasse juste “enregistrer” ?

    Seulement via un script d’application, sécurité oblige.
    Voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/

    #64417
    bebarth
    Maître des clés

    bonjour,

    Seulement via un script d’application, sécurité oblige.

    …et si cela t’intéresses, tu peux consulter les posts :
    https://abracadabrapdf.net/forum/index.php/topic,3450.msg20546.html#msg20546
    et
    https://abracadabrapdf.net/forum/index.php/topic,3086.msg20164.html#msg20164
    ou demander sur le forum !!! Mais sur le mois d’août ça va être compliqué je crois…
    @+
    :bonjour:

    #64418
    pierremaug
    Membre

    Bonjour,
    Merci Merlin et Bebarth !
    Je vais creuser pour le script d’application mais à mon avis, ça s’annonce compliqué dans la mesure ou le formulaire sera sur un serveur et donc utilisé par beaucoup de personnes.

    Merci en tout cas !

    #64419
    pierremaug
    Membre

    Question de curiosité :
    Son mon fichier en PJ, l’état de la voie (liste déroulante) permet de choisir entre HS ou DISPO.
    Si on choisi HS, en plus de passer deux champs en rouge, cela interdit la saisi de texte dans les champs.
    Jusque là ca fonctionne très bien.

    En revanche, lorsque je change l’état de la rame (liste déroulante) en “DISPO” “HS” ou “INCONNU” je peux à nouveau remplir du texte dans les champs.

    Pourquoi ce que ma fonction qui empêche la saisi n’est plus fonctionnel lorsque je change l’état de la rame ?

    Merci

    #64420
    Merlin
    Maître des clés

    C’est cette ligne qui commande le dé/verrouillage des champs :

    this.getField(“VOIE8”).readonly = true; // verrouillage

    ou

    this.getField(“VOIE8”).readonly = false; // déverrouillage

    #64421
    pierremaug
    Membre

    Tout simplement.
    merci Merlin.

    #64422
    bebarth
    Maître des clés

    …si je peux me permettre de te donner un conseil, tu devrais cocher la case “Valider la valeur sélectionnée immédiatement” de tes listes déroulantes.
    @+
    :bonjour:

    #64423
    pierremaug
    Membre

    Très bien. Quel est la raison ?

    #64424
    bebarth
    Maître des clés

    Dans ton fichier, par exemple, si tu coches cette case, la couleur change directement lorsque tu relâche la souris quand tu modifies la liste ETAT RAME alors que si elle n’est pas cochée, il faut attendre que ton champ soit validé (via une tabulation par exemple…).
    @+
    :bonjour:

    #64425
    pierremaug
    Membre

    Ah ok ! Effectivement c’est mieux !
    Merci

    #64426
    bebarth
    Maître des clés

    Pour moi, cette case devrait être cochée par défaut.
    Ça me parait tellement plus logique d’avoir immédiatement le résultat et je ne comprend pas l’intérêt qu’elle soit décochée !
    @+
    :bonjour:

    #64427
    Merlin
    Maître des clés

    C’est le poids du passé.
    Cette option n’a pas toujours existé, elle est venue avec Acrobat 7 ou 8. Avant il fallait utiliser JavaScript pour obtenir une validation instantanée.

    #64428
    pierremaug
    Membre

    Bonjour,

    Le débutant est de retour…

    Toujours sur le même document… Je comprends pas pourquoi je peux plus remplir mes champs de texte. Si j’ai un peu près compris la logique, grâce au script sur ma liste déroulante :

    [font=verdana, arial, helvetica, sans-serif]else if (event.value == “HS”) {[/font]
    [font=verdana, arial, helvetica, sans-serif] this.getField(“VOIE8”).fillColor = [“RGB”,(228/255),(31/255),(19/255)];[/font]
    [font=verdana, arial, helvetica, sans-serif] this.getField(“RAME8”).readonly = true;[/font]

    Je permet que le choix “HS” empêche l’écriture dans les champs. En revanche le reste du temps, on devrait pouvoir écrire dedans non ?

    D’autre part, j’ai l’impression que lorsque je clique sur un champ, les contours disparaissent. Une fausse manip’ de ma part ?

    Merci d’avance.

    #64429
    pierremaug
    Membre

    Apparemment la suite de mon message n’est pas parti…
    Le script me permet que le choix “HS” dans ma liste déroulante empêche le remplissage de champs de texte.
    En revanche je peux plus remplir même quand “HS” n’est pas sélectionné.

    Une idée ?

    Merci d’avance

    #64430
    bebarth
    Maître des clés

    bonjour,
    tu as confondu les champs RAMEx et VOIEx, par exemple :

    Code:
    this.getField(“VOIE8”).readonly = false; -> incorrect

    et

    Code:
    this.getField(“RAME8”).readonly = false; -> correct

    de plus, ta ligne :

    Code:
    for (var i=0; i<6; i++) {this.getField("VOIE8."+i).value = "";}

    provoque un message d’erreur (cf. console) car le script ne trouve pas les champs ! Peut-être sur une autre page ???
    Idem pour les autres champs RAMEx.

    @+
    :bonjour:

    #64431
    pierremaug
    Membre

    Etourderie de ma part.
    Désolé pour le dérangement et merci de votre retour.

    #64432
    pierremaug
    Membre

    Mon fichier est enfin terminé, merci beaucoup.
    En revanche je rencontre un problème…

    Quand j’ouvre mon fichier sur un autre ordinateur, je choisi “DISPO” dans la liste “état de la rame” et mes champs sont censés devenir vert. Et là, il ne passe en vert que lorsque je clique dessus.

    D’où peut venir le problème sachant que sur mon ordinateur tout fonctionne très bien.

    Merci d’avance

    PS : capture d’écran du problème et formulaire en PJ

    #64433
    bebarth
    Maître des clés

    …pour moi les champs sont verts également !
    :Euuuh: :Euuuh:

    #64434
    pierremaug
    Membre

    Hummm,
    Petite avancé : Avec adobe acrobat DC : ca ne marche
    avec adobe re

    #64435
    pierremaug
    Membre

    désolé :
    Avec adobe acrobat DC : ca ne marche pas
    Avec adobe reader  : ca marche

    #64436
    Merlin
    Maître des clés

    Quand j’ouvre mon fichier sur un autre ordinateur, je choisi “DISPO” dans la liste “état de la rame” et mes champs sont censés devenir vert…

    Chez moi ça fonctionne bien.
    La vérité est ailleurs…
    :joker:

    #64437
    bebarth
    Maître des clés

    bonjour,
    Sur mon Acrobat DC ça ne fonctionnait pas non plus.
    J’ai désactivé la case “Afficher la couleur….” dans les préférences “Formulaires” et maintenant ça fonctionne.
    @+
    :bonjour:

    #64438
    Merlin
    Maître des clés

    Oui, en tout cas la surbrillance masque la couleur des champs.

    #64439
    pierremaug
    Membre

    Effectivement ça fonctionne ! Merci !
    Une explication sur ces problèmes de “compatibilité” entre version d’acrobat ?

    #64440
    Merlin
    Maître des clés

    Ce n’est pas un problème de compatibilité, l’activation/désactivation de la surbrillance existe dans toutes les versions ultérieures à la version 5 d’Acrobat Pro et Reader.

    C’est une préférence utilisateur, mais on la modifier JavaScriptement pour un document (seulement celui qui contient le script) en utilisant un script à l’ouverture, sans que ça modifie le réglage général de l’utilisateur :

    Code:
    app.runtimeHighlight = false; // désactiver

    ou

    Code:
    app.runtimeHighlight = true; // activer
Affichage de 34 réponses de 1 à 34 (sur un total de 34)
  • Vous devez être connecté pour répondre à ce sujet.