Donnez vie à vos documents numériques !
 

Code JavaScript pour vérification de formulaire

abracadabraPDF Forums PDF – Général Code JavaScript pour vérification de formulaire

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46181
    gwenicrocket
    Membre

    Bonjour

    Voilà, j’ai des documents PDF qui me servent de relevés d’information. Je travaille avec Nuance pour insérer dans ces documents des champs de texte à remplir et des cases à cocher pour des réponses à des question par « oui »  ou par  « non » ou par « ne sait pas ».
    J’ai mis un bouton à la fin des documents de plusieurs pages, en bas de page.

    Je voudrais, lorsque je clique sur ce bouton, savoir si une ou plusieurs questions n’a pas eu de réponse et si un des champs de texte n’est pas rempli avant de l’enregistrer.
    Quel serait le code JavaScript a attribuer à ce bouton sachant que :
    – le bouton s’appelle « vérification du formulaire »,
    – pour chaque question il y a 2 cases à cocher : une pour oui, une pour non, et parfois une troisième case pour ne sait pas
                          – que celle pour oui s’appelle « case à cocher 1 » et renvoie la valeur true si elle est cochée,
                          – que celle pour non s’appelle « case à cocher 1 » et renvoie la valeur false si elle est cochée,
                          – que celle pour ne sait pas s’appelle « case à cocher 1 » et renvoie la valeur no si elle est cochée.
    – pour la réponse suivante c’est « case à cocher 2 », etc. (ceci pour qu’il n’y ait pas la possibilité qu’une case soit cochée uniquement sur les trois cases)
    – le nombre de cases à cocher est aléatoire selon les documents d’informations et je ne connais pas forcément leur nombre exact,
    – les champs de texte s’appellent texte 1, texte 2, etc.
    – la boite de dialogue qui s’ouvrira indiquera  » toutes les cases sont cochées » ou « au moins une case n’est pas cochée ».

    Le top serait « il y a X cases qui ne sont pas cochées » et si c’est le cas peut-on savoir lesquelles ? Mais ça c’est vraiment du luxe.
    Enfin bref, j’ai essayé des bouts de code mais je débute en JavaScript et du coup, comme ces codes sont parfois génériques je ne sais pas forcément ce qu’il faut changer dedans pour qu’il s’adaptent à mon document.

    Merci d’avance à tout ceux qui se pencherons sur ce sujet

Affichage de 17 réponses de 26 à 42 (sur un total de 42)
  • Auteur
    Réponses
  • #66597
    gwenicrocket
    Membre

    Le mieux est d’utiliser un script plus détaillé qui teste la valeur des champs en fonction de leur type, comme ça on n’en rate aucun :

    Code:
    var ncompteur=0;
    for (var k=0; k  var strName = this.getNthFieldName(k);
      var oChamp = this.getField(strName);
      if (oChamp.required == true) {
          if ((oChamp.type == « text ») && (oChamp.value == «  »)) {
            ncompteur = ncompteur+1;
          }
          else if ((oChamp.type == « checkbox ») && (oChamp.value == « Off »)) {
            ncompteur = ncompteur+1;
          }
      }
    }

    if (ncompteur==0) {
      this.getField(« Signature1 »).display=display.visible;
    } else {
      this.getField(« Signature1 »).display=display.hidden;
    }

    si je comprend bien avec ce code je ne test plus « obligatoire »qui est dans mes champs mais la valeur du champs et ce à condition que le nom du champs texte  contient « text »
    et les case à cocher « checkbox »
    ou il faut que je remplace checkbox par caseacocher qui est le nom de ma case à cocher?ensuite si je veux tester d’autre champs comme le champs signature comment est ce que je peux le rajouter dans le code?

    #66598
    bebarth
    Maître des clés

    bonsoir,

    si je comprend bien avec ce code je ne test plus « obligatoire »qui est dans mes champs mais la valeur du champs et ce à condition que le nom du champs texte  contient « text »  et les case à cocher « checkbox »

    Non, dans ce script de Merlin tu regardes si le champ est obligatoire, si oui :
    ncompteur est incrémenté si c’est un champ de type « text » (champ texte) ET que sa valeur soit égale à «  » (vide)
    sinon
    ncompteur est incrémenté si c’est un champ de type « checkbox » (champ case à cocher) ET que sa valeur soit égale à « Off »(non cochée)
    Peut-être un peu plus dur à comprendre, mais en une seule ligne on peu aussi écrire :

    Code:
    if (oChamp.required == true && (((oChamp.type == « text ») && (oChamp.value == «  »)) || ((oChamp.type == « checkbox ») && (oChamp.value == « Off »)))) ncompteur++;

    Attention aux parenthèses…
    @+
    :bonjour:

    #66599
    gwenicrocket
    Membre

    bonsoir,Non, dans ce script de Merlin tu regardes si le champ est obligatoire, si oui :

    excuse Bebarth,
    je débute vraiment et du coup j’ai un peu de mal. :Euuuh: je ne vois pas dans le dernier code de merlin ce qui détermine quel champs est obligatoire.

    Code:
    if (oChamp.required == true && (((oChamp.type == « text ») && (oChamp.value == «  »)) || ((oChamp.type == « checkbox ») && (oChamp.value == « Off »)))) ncompteur++;

    dans ce code oChamp.required == true , on parle de la valeur du champs?
    si une case à coché n’a pas la valeur true mais une autre valeur lorsqu’elle est coché ça va pas fonctionner non?comment dois je nommer mes champs texte, mes case à coché avec le code de merlin?si je rajoute le champs signature à vérifier comment je le nomme dans ce code
    merci

    #66600
    bebarth
    Maître des clés

    bonsoir,

    • oChamp.required == true : si la case « Obligatoire » est cochée
    • oChamp.type == « text » : si le type du champ est « texte »
    • oChamp.value == «  » : si la valeur du champ est «  » (vide)
    • oChamp.type == « checkbox » : si le type du champ est « case à cocher »
    • oChamp.value == « Off » : si la case à cochée n’est pas cochée (si elle est cochée, la valeur est égale à celle indiquée)
    • ncompteur++ : ncompteur+1
    • [/list]…et en gros 2*if==&&  :geek:

      @+
      :bonjour:

    #66601
    Merlin
    Maître des clés

    Il y a 7 types de champs :

    button
    checkbox
    combobox (menu déroulant)
    listbox (zone de liste)
    radiobutton
    signature
    text

    #66602
    gwenicrocket
    Membre

    bonsoir,

    • oChamp.required == true : si la case « Obligatoire » est cochée
    • [/list]@+
      :bonjour:

    Bonsoir bebarth c’est pour ça que je comprend pas je pense.

    En fait lorsque tu crées un champ peux-tu dire s’il est obligatoire en cochant une case ?
    Cette case que tu peux cocher pour dire s’il est obligatoire est-elle dans le champ ?
    Moi avec Nuance je ne crois pas que cette possibilité existe. Je crée mon champ et je peux choisir sa valeur de sortie comme true s’il est rempli, ou alors c’est peut être comme ça que tu le testes avec ce code, non ?

    Merci Merlin
    Pour les noms des champs à intégrer dans la formule par-contre dans ce code la condition est if …. else if…  pour plusieurs champs, je dois écrire if champs texte else if case à cocher else if champs signature…

    Sinon juste pour info j’ai regardé le formulaire de remiB et j’ai vu que quand il coche une case non concernée cela fait disparaitre un lot de boutons-radio. Est-ce que je peux me servir de ça pour effacer un groupe de plusieurs cases à cocher ? Et dans ce cas est-ce que les cases qui disparaissent du document ne seront pas testées par le code (car elles sont sensées être « Off ») ?

    Est-ce que je pourrais avoir le code de cette action qui fait disparaitre les autres cases svp ?
    Par-contre pour ce qui est de « nommer » dans la boite d’alerte la case ou le champ qui n’est pas coché ou la page où un champ est vide comment je peux faire ?

    #66603
    bebarth
    Maître des clés

    bonsoir,

    En fait lorsque tu crées un champ peux-tu dire s’il est obligatoire en cochant une case ?

    Tout à fait ! Je ne connais pas Nuance mais j’imagine que ce doit être pareil…

    Je crée mon champ et je peux choisir sa valeur de sortie comme true s’il est rempli, ou alors c’est peut être comme ça que tu le testes avec ce code, non ?

    Non, la valeur que tu indiques est celle qui sera prise en compte si la case est cochée. Tu peux indiquer « true », mais tu peux également indiquer du texte ou un nombre.
    Si la case n’est pas cochée, sa valeur est « Off ».

    Pour les noms des champs à intégrer dans la formule par-contre dans ce code la condition est if …. else if…  pour plusieurs champs, je dois écrire if champs texte else if case à cocher else if champs signature…

    Oui, tu dois faire comme ça.

    @+
    :bonjour:

    #66604
    gwenicrocket
    Membre

    Bonjour bebarth

    J’ai bien la case requise mais elle est grisée et je ne peux y toucher je ne sais pas pourquoi.
    Donc je vais prendre le premier code de Merlin, je pense que je me suis rendu compte aussi d’un cas qu’il faudrait prendre en compte et que j’ai oublié d’ajouter dans le formulaire.

    J’ai parfois une case qu’il faut cocher en tête d’un groupe de questions. Celle-ci est cochée si la personne n’est pas concernée par ce groupe de question. Et par-contre pour ces question la réponse se fait dans un champ de texte. Donc en gros il faut que ces groupes de champs qui seront vides ne soient pas comptés comme un oubli si la case en amont de ces questions est cochée.
    Mais comment faire?

    #66605
    bebarth
    Maître des clés

    bonsoir,
    Peux-tu partager ton fichier ?
    @+
    :bonjour:

    #66606
    gwenicrocket
    Membre

    Bonsoir bebarth

    J’ai rajouté au premier fichier l’exemple que je te disais page 2 (par contre ce n’est pas que la question 19 :geek: ) un mauvais copier coller pardon c’est une série de questions qui sont liées à la première case en en-tête. Lorsque la case est cochée, les cases seront donc vides donc cela ne fonctionnera pas avec le programme d’origine de Merlin malheureusement. On peut retrouver plusieurs fois des groupes de questions liés à une case à cocher comme cela. J’ai réussi a avoir la case requise que je peux cocher mais uniquement pour les champs texte pas pour les cases à cocher, j’ai essayé le second programme de Merlin mais je n’ai pas réussi à le faire marcher en cochant requis. Par contre serait il possible de mettre dans le programme que vous proposez d’une autre couleur ce qui peut être changé par moi en fonction du nom que je donne à mes cases ou à mes champs et en noir le reste qui est vraiment du code juste pour savoir si c’est parce-que je devais changer un truc dans le code pour que cela corresponde à mon formulaire ou si c’est le code qui ne correspond pas ?

    Merci d’avance

    #66607
    bebarth
    Maître des clés

    bonjour,
    Du coup on peut renommer les champs ou pas ?
    Au lieu de citer tous les champs non remplis on pourrais aussi les entourés d’un filet rouge !!!
    Je ne pourrai pas regarder avant la semaine prochaine, désolé !
    @+
    :bonjour:

    #66608
    gwenicrocket
    Membre

    Du coup on peut renommer les champs ou pas ?

    bonjour bebarth,
    oui on peut renommer les champs moi j’avais écris obligatoire devant tous les champs qui l’était
    et je pensais peut être que l’on pouvait nommer « sansobjet » ou « nonconcerne » devant ceux qui était lié à la case à coché non concerné
    mais attention il peux y avoir dans tout le document plusieurs fois ce type de cas, de case à coché qui inhibe plusieurs champs texte, ou case à coché.

    Au lieu de citer tous les champs non remplis on pourrais aussi les entourés d’un filet rouge !!!

    je préfèrerai que la boite de dialogue me dise le champs, 
    ou la page ou est situé le champs qui est vide,
    Certains questionnaire ont beaucoup de page .
    par contre rien n’empêche que le champs soit entouré en plus d’un filet rouge.
    le code pourrais aussi s’arrêter à la première erreur trouvé il n’est pas utile que tout le document soit testé avant de dire qu’il y ai un problème.
    s’il y en a plusieurs la prochaine sera trouvé a la prochaine relance du code.

    #66609
    Merlin
    Maître des clés

    le code pourrais aussi s’arrêter à la première erreur trouvé il n’est pas utile que tout le document soit testé avant de dire qu’il y ai un problème.
    s’il y en a plusieurs la prochaine sera trouvé a la prochaine relance du code.

    Non.  :tutut:
    En terme d’ergonomie et d’expérience utilisateur c’est ce qu’il y a de pire.
    Rappelles toi du dernier formulaire qui t’a fait ce plan la…  :mur:

    Lister les champs c’est bien, mais s’il y en a 10 répartis sur plusieurs pages l’utilisateur ne pourra pas tous les mémoriser.
    En tout cas il faut que dès la première alerte tous les champs non remplis soient mis en évidence, par exemple avec un cadre rouge.

    Pour supprimer le cadre rouge quand l’utilisateur remplit les champs signalés, il faut mettre ce script en action « champ activé » dans tous les champs concernés :

    Code:
    event.target.strokeColor = color.transparent;

    transparent ou autre, selon la couleur de contour d’origine du champ.
    :Smiley15:

    #66610
    gwenicrocket
    Membre

    bonjour merlin,
    donc en résumé je dois écrire un script en java sur tous les champs obligatoire, case à coché ou texte. mais comment tu mets les champs qui sont vide en surbrillance

    Code:
    event.target.strokeColor = color.transparent;

    par contre concernant ton code avec champs requis je ne peux l’utiliser car je ne peux mettre que les champs texte en requis je ne sais pas pourquoi il est grisé pour les cases à coché,il faut donc que je trouve une autre solution soit en mettant le nom obligatoire dans le nom de la case à coché.
    pour ce qui est des cases non concerné si je coche cette case les autres champs lié à cette case seront vide par défaut du coup ,
    problème avec le code qui va me les identifiés comme vide, il faudrait un code général dans le code que tu m’a donné qui évite de contrôler ces cases si la case est coché quitte a ce que ces cases et ces champs est un nom différent
    qu’en pense tu?

    #66611
    Merlin
    Maître des clés

    mais comment tu mets les champs qui sont vide en surbrillance ?

    Il faut modifier le script ci-dessus ainsi :

    var ncompteur=0;
    for (var k=0; k  var strName = this.getNthFieldName(k);
      var oChamp = this.getField(strName);
      if (oChamp.required == true) {
          if ((oChamp.type == « text ») && (oChamp.value == «  »)) {
            ncompteur = ncompteur+1;
            oChamp.strokeColor = color.red;
          }
          else if ((oChamp.type == « checkbox ») && (oChamp.value == « Off »)) {
            ncompteur = ncompteur+1;
            oChamp.strokeColor = color.red;
          }
      }
    }
    if (ncompteur==0) {
      this.getField(« Signature1 »).display=display.visible;
    }
    else {
      this.getField(« Signature1 »).display=display.hidden;
    }

    Ce qui nous donne ceci une fois exprimé en formulation simplifiée bebarthienne :  :Smiley03:

    if (oChamp.required == true && (((oChamp.type == « text ») && (oChamp.value == «  »)) || ((oChamp.type == « checkbox ») && (oChamp.value == « Off »)))) {
    ncompteur++;
    oChamp.strokeColor = color.red;
    }
    if (ncompteur==0) {
      this.getField(« Signature1 »).display=display.visible;
    }
    else {
      this.getField(« Signature1 »).display=display.hidden;
    }

    #66612
    Merlin
    Maître des clés

    je ne sais pas pourquoi il est grisé pour les cases à cocher

    Si tu ne peux pas le faire via l’interface il faut le faire via JavaScript :

    Code:
    this.getField(« NOMdeLAcase »).required = true;

    :Smiley15:

    #66613
    gwenicrocket
    Membre

    merci merlin
    et pour les cases « non concerné par ces questions » ?
    de quel façon peut on le gérer,  en nommant spécifiquement tous les champs concerné par cette cases et en intégrant un code qui les test dans la vérification finale?
    j’avais pensé à un truc sinon mais c’est un peu lourd si il y a plusieurs pages c’est pour ça que je préfèrerait cette solution ci dessusje pensais à:  lorsque la case non concerné est coché
    alors coché toutes les case à coché concerné oui
    et écrire sans objet dans les champs texte concerné
    puis rendre les champs cases et les champs texte invisible
    comme ça on ne voit que la case à coché non concerné coché (qui n’est pas requise)
    et tous les autres champs requis sont invisible mais non vide et pas « off »
    quel serait le code dans ce cas sachant que la case non concerné rempli plusieurs champs
    mais ça c’est vraiment si on ne peut pas appliquer la première solution car
    je suis obligé dans ce cas d’écrire du code un peu partout au lieu de le faire que dans le test finale du coup c’est plus lourd quand il y a beaucoup de pages

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