Donnez vie à vos documents numériques !
 

Changement de champs basé sur différentes sélections (Combo Box). – RÉSOLU

abracadabraPDF Forums PDF – Général Changement de champs basé sur différentes sélections (Combo Box). – RÉSOLU

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #44323
    nabnub
    Membre

    Bonjour tout le monde,

    je suis en train de suivre la méthode expliqué sur ce site: http://acrobatusers.com/tutorials/print/change_another_field

    Mais je rencontre quelques difficultés pour l’appliquer sur mon formulaire :

    voici le formulaire qu’ils proposent et fonctionne parfaitement: http://acrobatusers.com/assets/collections/tutorials/legacy/tech_corne rs/javascript_corner/tips/2006/change_another_field/ComboTest_Complete.pdf

    Voici mon formulaire : http://cjoint.com/?BKhkrK80jDg

    Brièvement, je voudrais pouvoir parvenir au résultat suivant :
    -quand je sélectionne le “Module code”: Y1H3 ou Y2H5 etc.. jusqu’à Y6H11
    -dans la colonne Texn n°(ie pour les fields “Texte nRow”)
    j’affiche dans l’ordre:

    pour Y1H3 sélectionné :

    3      13    20    7      12    21    22    donc j’ai suivi les indication du site: dans les propriétés du champ “Module code” :Format > Custom Keystroke Script

    j’ai placé le code suivant:

    Code:
    if( event.willCommit )
    {
      if(event.value == ” “)
        this.resetForm([“Texte nRow1″,”Texte nRow2″,”Texte nRow3″,”Texte nRow4″,”Texte nRow5″,”Texte nRow6″,”Texte nRow7″,”Texte nRow8″,”Texte nRow9″,”Texte nRow10″,”Texte nRow11”]);
      else
        SetFieldValues(event.value);
    }

    et puis j’ai créer un document Javascript nomé “SetFieldValues ” avec le code suivant:

    Code:
    //————————————————————-
    //—————–Do not edit the XML tags——————–
    //————————————————————-
    //
    //SetFieldValues
    //
    /*********** belongs to: Document-Level:SetFieldValues ***********/
    // Place all prepopulation data into a single data structure
    var DeptData = { Y1H3:{ Line1: “3”,
            Line2: “13”,
            Line3: “20”,
            Line4: “”,
            Line5: “”,
            Line6: “”,
            Line7: “”,
            Line8: “”,
            Line9: “”,
            Line10: “”,
                                  Line11: “” },
                    Y2H5:{ Line1: “1”,
            Line2: “7”,
            Line3: “12”,
            Line4: “21”,
            Line5: “22”,
            Line6: “”,
            Line7: “”,
            Line8: “”,
            Line9: “”,
            Line10: “”,
                                  Line11: “” },
                    Y3H6 :{ Line1: “5”,
            Line2: “11”,
            Line3: “16”,
            Line4: “23”,
            Line5: “34”,
            Line6: “39”,
            Line7: “”,
            Line8: “”,
            Line9: “”,
            Line10: “”,
                                  Line11: “” },
                    Y4H8:{ Line1: “2”,
            Line2: “6”,
            Line3: “9”,
            Line4: “15”,
            Line5: “30”,
            Line6: “33”,
            Line7: “38”,
            Line8: “42”,
            Line9: “”,
            Line10: “”,
                                  Line11: “” },
        Y5H9:{ Line1: “4”,
            Line2: “10”,
            Line3: “26”,
            Line4: “29”,
            Line5: “31”,
            Line6: “25”,
            Line7: “37”,
            Line8: “40”,
            Line9: “41”,
            Line10: “”,
                                  Line11: “” },
        Y6H11:{ Line1: “8”,
            Line2: “14”,
            Line3: “17”,
            Line4: “18”,
            Line5: “19”,
            Line6: “24”,
            Line7: “27”,
            Line8: “28”,
            Line9: “32”,
            Line10: “35”,
                                  Line11: “36” }};
           
    function SetFieldValues(cDeptName)
    {
      this.getField(“Texte nRow1”).value = DeptData[cDeptName].Line1;
      this.getField(“Texte nRow2”).value = DeptData[cDeptName].Line2;
      this.getField(“Texte nRow3”).value = DeptData[cDeptName].Line3;
      this.getField(“Texte nRow4”).value = DeptData[cDeptName].Line4;
      this.getField(“Texte nRow5”).value = DeptData[cDeptName].Line5;
      this.getField(“Texte nRow6”).value = DeptData[cDeptName].Line6;
      this.getField(“Texte nRow7”).value = DeptData[cDeptName].Line7;
      this.getField(“Texte nRow8”).value = DeptData[cDeptName].Line8;
      this.getField(“Texte nRow9”).value = DeptData[cDeptName].Line9;
      this.getField(“Texte nRow10”).value = DeptData[cDeptName].Line10;
      this.getField(“Texte nRow11”).value = DeptData[cDeptName].Line11;
    }

    //


    //

    //
    //DepartmentNames:Keystroke
    //

    et donc rien ne se passe vraiment aprés les différentes sélections???
    dans la console d’erreurs: j’ai le message suivant

    Code:
    Acrobat EScript Built-in Functions Version 10.0
    Acrobat SOAP 10.0

    TypeError: DeptData[cDeptName] is undefined
    78:Field:Keystroke
    TypeError: DeptData[cDeptName] is undefined
    56:Field:Keystroke

    Pourtant je n’ai pas ce message d’erreur avec leur exemple (dont le lien est plus haut).
    Est-ce que quelqu’un pourrait jeter un coup d’oeil svp ?

    Merci.

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

    Salut,

    C’est certainement une erreur très basique parce-que je ne la trouve pas.
    Attendons le passage d’un vrai pro du JavaScript…
    :joker:

    #53901
    nabnub
    Membre

    salut Merlin,

    lol

    attendons attendons…donc

    #53902
    Merlin
    Maître des clés

    Inutile, ça y est j’ai compris : c’est le champ invisible “Examiner” qui mettait sa zone car il fait doublon avec le script de document.
    J’ai mis un moment à comprendre pourquoi mes modifs dans le script de document ne fonctionnaient pas…

    Donc :

    – j’ai supprimé ce champ parasite et inutile,

    – il y a un problème dans le champ-liste “Module code”, tous les intitulés sont précédés d’une espace alors qu’il n’y en a pas dans le script : donc les intitulés ne sont pas reconnus, ce qui génère les messages d’erreur de la console JavaScript (et non pas les messages JavaScript de la console d’erreur… ;-))
    Regarde dans le ci-joint j’ai corrigé “Y1H3”, qui du coup fonctionne (et se retrouve en fin de liste).

    – tu aurais intérêt à utiliser la convention de dénomination des champs (itération et séparation par un point dans le nom), ce qui facilite les opérations de reset par exemple (voir dans le ci-joint),

    – tu aurais également intérêt à ne jamais placer d’espace dans les noms de champs, il faut préférer le tiret-bas (underscore) ou n’importe quoi d’autre (sauf les caractères accentués ou spéciaux).

    :bonjour:

    [attachment deleted by admin]

    #53903
    nabnub
    Membre

    un grand merci à Merlin une fois de plus!

    je n’ai pas fait du tout attention à cet espace devant les Y..H..

    parcontre il y’a un 2 autres souci qui vienent d’apparaitre, j’ai des petit scripts sur les champs suivants: Excellent, Good, Satisfactory et Unsatisfactory

    et aussi dans les champs MarksRow…

    qui selon ce qui a été sélectionné dans le Module code devrait afficher des pourcentage dans les champs: Excellent, Good, Satisfactory et Unsatisfactory

    et puis lorsque je sélectionne le grade dans les champs Grade.. j’ai aussi un pourcentage qui s’affiche dans les champs MarksRow…

    ça marchait avant, mais ça ne marche plus now, y’aurait-il un probleme dans l’ordre d’exécution des différents script?

    voici le fichier avec les modifications que tu m’a proposé au dessus: http://cjoint.com/?BKho0OF8y1S

    j’aurais une autre question, je ne sais pas si j’ai besoin de créer un nouveau post pour poser la question?? (faites-le moi savoir)

    je suis entrain d’essayé d’automatisé le champs “First sit examinationRow1” qui selon la valeur du “MarksTotal” affiche soit:

    “Awarded with certificate”              ( si la valeur du champ MarksTotal est stricement supérieur)
    “Can begin next level”                  (si la valeur est superieur à 70 et inferieur à 98)
    “Fail”                                          (si inferieur à 70)

    voici ce que j’ai essayé d’ecrire pour le code, mais ça ne marche pas vraiment, peut etre des intérférence avec d’autres script? je sais pas trop…

    Code:
    var nMarksTotal = this.getField(“MarksTotal”);
    if ( nMarksTotal.value == ‘100’ ) event.value = “Awarded”;
    else if ( nMarksTotal.value >= ’70’ || nMarksTotal.value else if ( nMarksTotal.value else event.value = “”;
    #53904
    Merlin
    Maître des clés

    1- c’est très certainement dû aux changements de noms de champs…

    2- dans ton script ce qu’il manque c’est le mot “target” :

    var nMarksTotal = this.getField(“MarksTotal”).value;
    if ( nMarksTotal == ‘100’ ) event.target.value = “Awarded”;
    else if ( nMarksTotal >= ’70’ || nMarksTotal target
    .value = “Can begin next level”;
    else if ( nMarksTotal target
    .value = “Fail”;
    else event.target.value = “”;

    :Smiley15:

    #53905
    nabnub
    Membre

    désolé de te rendre fou avec mes questions,

    mais seuls les chanps “Texte nRow1”  ont été changé en “TextenRow.1” etc… n’est-ce pas?

    et puis dans le champ “Excellent” le code commence avec:

    Code:
    (function () {

       
        var a = getField(“Module code”).value; // et comme tu peut le constater ce champs a qui je fait appel porte bien le nom “Module code”
       
    if (a === 0) {
            event.value = “”;
        }

    etc…

    je ne vois pas vraiment  ou est l’erreur dans la nomination des champs?

    #53906
    Merlin
    Maître des clés

    Non, je n’ai rien changé d’autre comme noms de champ, mais par exemple j’ai constaté en testant le script que le champ total qui est à gauche ne totalise rien du tout…
    :doute:

    Dans ton script il manque (encore !) le mot “target”, et il manque aussi une accolade fermante.
    Et fait bien attention aux espaces dans les noms de champs… Ca n’a l’air de rien mais ensuite quand on veut récupérer les données dans un tableur c’est parfois… irrécupérable !

    (function () {
    var a = getField(“Module_code”).value;
    if (a === 0) {event.target.value = “”};
    }

    event.value” c’est la valeur de l’événement, mais cela ne l’assigne par à quelque chose pour autant.
    event.target.value” c’est la valeur de l’événement assignée à la cible (target), la cible étant le champ visé, celui qui est utilisé à l’instant T.

    :Smiley15:

    #53907
    nabnub
    Membre

    les petites erreurs sont parfois plus embétantes que les grosses lol

    voici le form avec les modifications que tu as suggéré plus haut: http://cjoint.com/?BKhuipq0JiD

    j’ai rajouté la totolisation des champs MarksRow
    j’ai rajouté aussi les “target” et les accolades
    j’ai changé le nom du champ “Module code” en “Module_code”

    mais le probleme persiste…?

    par exemple le champ Excellent contient le code suivant, jai fait les memes changement pour les champs “Good, Satisfactory et Unsatisfactory”
    mais rien ne s’affiche aprés les différentes sélections

    Code:
    (function () {
       
    var a = getField(“Module_code”).value;
       
    if (a === 0) {event.target.value = “”};

    if (a === 1) {event.target.value = util.printf(“%.2f”, 33.33) + ” %”}; // j’affiche simplement 33 % si

    if (a === 2) {event.target.value = util.printf(“%.2f”, 20) + ” %”};

    if (a === 3) {event.target.value = util.printf(“%.2f”, 16.67) + ” %”};

    if (a === 4) {event.target.value = util.printf(“%.2f”, 12.5) + ” %”};

    if (a === 5) {event.target.value = util.printf(“%.2f”, 11.11) + ” %”};

    if (a === 6) {event.target.value = util.printf(“%.2f”, 9.09) + ” %”};

    })();

    et ce code, affiche tout le temps, meme sans aucune selection: “Can begin next level”  ???

    Code:
    var nMarksTotal = this.getField(“MarksTotal”).value;
    if ( nMarksTotal == ‘100’ ) event.target.value = “Awarded”;
      else if ( nMarksTotal >= ’70’ || nMarksTotal   else if ( nMarksTotal   else event.target.value = “”;

    pourrait tu m’éclairer un peu plus, merci

    #53908
    Merlin
    Maître des clés
    Code:
    (function () {
       
    var a = getField(“Module_code”).value;
       
    if (a === 0) {event.target.value = “”};

    if (a === 1) {event.target.value = util.printf(“%.2f”, 33.33) + ” %”}; // j’affiche simplement 33 % si

    if (a === 2) {event.target.value = util.printf(“%.2f”, 20) + ” %”};

    if (a === 3) {event.target.value = util.printf(“%.2f”, 16.67) + ” %”};

    if (a === 4) {event.target.value = util.printf(“%.2f”, 12.5) + ” %”};

    if (a === 5) {event.target.value = util.printf(“%.2f”, 11.11) + ” %”};

    if (a === 6) {event.target.value = util.printf(“%.2f”, 9.09) + ” %”};

    })();

    C’est normal que ça ne fonctionne pas :

    – le champ Module_code n’a pas de valeurs d’exportation associées aux intitulés.
    Donc soit il faut en mettre une, soit il faut utiliser la valeur de l’intitulé (Y1H3 par ex.),

    – il ne faut pas placer ce code en fonction c’est le meilleur moyen pour qu’il ne se déclenche pas,

    – la vérification d’égalité c’est == et non pas === (il est possible que ce soit correct aussi mais dans le doute…),

    – il manque les guillemets autour des valeurs testées,

    – il faut placer this. devant getField,

    – qu’attends tu de “util.printf” ???

    Le code devrait donc plutôt ressembler à ca :

    var a = this.getField(“Module_code”).value;
    if (a == “0”) {event.target.value = “”};
    if (a == “1”) {event.target.value = “33.33 %”};
    if (a == “2”) {event.target.value = “20 %”};
    if (a == “3”) {event.target.value = ” %”};
    if (a == “4”) {event.target.value = “12.5 %”};
    if (a == “5”) {event.target.value = “11.11 %”};
    if (a == “6”) {event.target.value = “9.09 %”};

    Ou bien à ça :

    var a = this.getField(“Module_code”).value;
    if (a == “Y1H3”) {event.target.value = “”};
    if (a == “Y2H4”) {event.target.value = “33.33 %”};

    etc.

    et ce code, affiche tout le temps, meme sans aucune selection: “Can begin next level”  ???

    Code:
    var nMarksTotal = this.getField(“MarksTotal”).value;
    if ( nMarksTotal == ‘100’ ) event.target.value = “Awarded”;
      else if ( nMarksTotal >= ’70’ || nMarksTotal   else if ( nMarksTotal   else event.target.value = “”;

    pourrait tu m’éclairer un peu plus, merci

    C’est normal que ça ne fonctionne pas là aussi : le champ MarksTotal exécute un script de validation qui ajoute systématiquement “ %” (espace-pourcentage) à la valeur de ce champ.
    Donc cette valeur ne peut jamais correspondre puisque tu recherches des valeurs sans espace et sans pourcentage…
    :oh:

    Quand je t’avais indiqué le script pour ajouter espace-pourcentage, je t’avais mis en garde contre les conséquences que pouvait avoir la modification du formatage du résultat d’un calcul, surtout si cette valeur doit être  ré-utilisée ensuite.
    Je t’avais encouragé à utiliser un pourcentage “en dur” (soit du texte sur la page, soit dans un champ à part et verrouillé en lecture seule) et à laisser la valeur du calcul telle quelle.
    :Smiley15:

    #53909
    nabnub
    Membre

    Salut Merlin,

    merci bien j’ai fait toute les modifications nécessaires, presque tout marche maintenant, il ne me reste plus qu’à essayer d’automatiser le champ First sit examinationRow1 avec un script qui fonctionne, j’ai un peu plus de temps maintenant, je vais essayer ce week end de résoudre ce probleme avec les pourcentages et les différentes conditions, je posterais le fichier final si j’y parviens

    merci bien

    #53910
    Merlin
    Maître des clés

    N’hésite pas à poster aussi même si tu n’y arrives pas.
    :Smiley03:

    #53911
    nabnub
    Membre

    Salut

    donc voila, ce n’était pas bien compliqué le dernier script a faire, je ne sais pas si je respecte les regles de l’art concernant l’écriture de script en javascript, mais je poste finalement le résultat final qui me convient parfaitement:

    http://cjoint.com/?BKmsgYxdG89 

    parcontre une derniere petite question: pour le champs “Date 1” et “Date 2” je voudrais alerté l’utilisateur en cas d’oublie

    donc j’ai pensé à la condition suivante,
    pour “Date 1”: les conditions se fait sur “Grade 1”, si l’utilisateur à sélectionner quelque chose et que la date n’est pas présente, un message apparait pour demander la saisie de la date,

    j’ai trouvé cet article http://answers.acrobatusers.com/How-I-enforce-required-fields-q1700.aspx ,
    ils proposent 2 liens en bas de la page

    mais bon je n’arrive pas trop à suivre la méthode?

    #53912
    Merlin
    Maître des clés

    par-contre une derniere petite question: pour le champs “Date 1” et “Date 2” je voudrais alerté l’utilisateur en cas d’oublie

    Ce script en “champ activé” ou en “souris enfoncé” devrait faire l’affaire :

    if (this.getField(“date1”).value == “”)
    {app.alert(“Vas tu enfin me remplir ce champ date oui ou non ?“)};

    :Smiley03:

    #53913
    nabnub
    Membre

    merci bien

    enfin je vois le bout du tunnel

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