Code JavaScript pour vérification de formulaire  (Lu 257 fois) Partager ce sujet Imprimer

1 B


gwenicrocket  30 novembre 2019 : 18:04

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

IP archivée


bebarth  01 décembre 2019 : 10:32

bonjour,
C'est assez simple, il suffit de vérifier tous les champs et de voir s'il est vide pour un champ texte ou si la valeur de la case à cocher est "Off".
Toutes les cases à cocher et tous les champs texte du document doivent-ils être pris en compte, ou seulement certains et/ou sur certaines pages ?
Réponse lundi...
Bon dimanche.
@+
 :bonjour:

IP archivée


gwenicrocket  01 décembre 2019 : 12:42

Bonjour bebarth,

Merci pour cette réponse rapide
Oupss j'ai oublié cette précision qui n'est pas des moindres en effet.
Je ne sais pas si cela est réalisable donc je cherchais au départ un programme assez court qui teste, comme tu le dis, tous les champs et te dit si certains sont vides.
Mais en fait, tous les champs texte et case à cocher ne doivent pas être pris en compte, et il faut tester toutes les pages.
(mais si je dois éviter de tester une page j'aimerais savoir comment faire au cas où)
Sur certaines pages j'ai placé certains champs texte supplémentaires pour mettre plusieurs noms (pour un groupe de personne), si la personne est seule ou si c'est un groupe il se peut que des champs soit vides. Ces champs sont nommés Nom 1, Nom 2, etc.
Et en bas de certaines pages j'ai mis des champs de texte nommés "observation 1", "observation 2...3...etc"  pour que les personnes puissent ajouter un supplément d'information.
En fait, j'aimerais que, lorsque je clique sur le bouton, le programme m'indique quels sont les champs qui sont vides.
Ça, se serait le top, mais si déjà le programme me dit qu'il y a un champ de vide je pourrai visionner le document pour voir où se trouve l'erreur.
C'est surtout pour vérifier qu'aucun champ ne soit vide par erreur et pas intentionnellement.

Je dit ça car j'ai vu des programmes de vérification qui seraient très longs où il faut recenser toutes les cases et tous les champs texte dans le programme pour les tester un par un.
Ceci implique de connaitre pour chaque document le nombre de champs exact, et comme il m'est arrivé de rajouter des cases à cocher ou des champs texte plus tard, le nombre situé après la case à cocher peut être aléatoire pour éviter les doublons.
Je cherche donc un programme général assez court qui peut s'appliquer à plusieurs document et pas spécifiquement à un document.
Après comme je nomme mes champs de texte est il possible de ne pas tester un champ qui serait nommé "observation 1 ou 2 ou 3..." par exemple.
Ou alors si une Observation est notée que le programme m'indique "il y a x observations".

Mais là je deviens exigeant :jerisjaune: .
Après comme le groupe de trois case à cocher, "oui", "non", "ne sait pas" porte le même nom "case a cocher 1" par exemple mais que la valeur de sortie n'est pas la même vu qu'il n'y aura qu'une case de cochée sur les trois est-ce que cela ne va pas poser problème de tester pour voir si le champ est Off?
J'espère que je me suis bien expliqué.
J'essayerai de joindre un fichier PDF pour test lundi pour que ce soit plus clair

IP archivée


Merlin  01 décembre 2019 : 17:08

Bonjour

Par exemple ce script (non testé) teste tous les champs dont le nom contient "obligatoire", et chaque fois qu'il en rencontre un vide ou non coché (valeur == "Off") il incrémente le compteur de +1.
Ensuite il affiche une alerte en fonction de la valeur de nCompteur.


var nCompteur = 0;
for (var i=0; i<this.numFields; i++) {
   strName = this.getNthFieldName(i);
   if ((/obligatoire/.test(strName)) {
      if (this.getField(strName).value == "") || (this.getField(strName).value == "Off")) {
         nCompteur = nCompteur+1;
      }
   }
   if (nCompteur == 0) {
      app.alert("OK");
   }
   else {
      app.alert("KO");
   }
}

IP archivée


bebarth  02 décembre 2019 : 10:54

bonjour,
Il faudrait par exemple avoir une base de nom pour toutes les cases à cocher à vérifier (cacAverifier1, cacAverifier2, cacAverifier3,...) et la même chose pour les champs texte à vérifier (txtAverifier1, txtAverifier2, txtAverifier3,...) et ensuite tu ne t'occupes plus que des noms des champs.
Ensuite pour la fenêtre d'alerte on peut faire un peu ce qu'on veut... on peut même indiquer quels champs ne sont pas renseignés.
Si tu peux partager ton fichier...
@+
 :bonjour:

IP archivée


Merlin  02 décembre 2019 : 11:06

Il faudrait par exemple avoir une base de nom pour toutes les cases à cocher à vérifier (cacAverifier1, cacAverifier2, cacAverifier3,...) et la même chose pour les champs texte à vérifier (txtAverifier1, txtAverifier2, txtAverifier3,...) et ensuite tu ne t'occupes plus que des noms des champs.
C'est ce que j'ai fait ci-dessus avec le mot "obligatoire", bien entendu on peu utiliser n'importe quel autre mot à la place.
 :Smiley03:

IP archivée


bebarth  02 décembre 2019 : 11:34

C'est ce que j'ai fait ci-dessus...

Désolé, je n'avais pas lu ta réponse en fait !!!
@+
 :bonjour:

IP archivée


Merlin  02 décembre 2019 : 11:44

Pas de souci, je précisais surtout à l'attention des milliers de lecteurs (à venir) de ce sujet.
 :geek:

IP archivée


gwenicrocket  02 décembre 2019 : 21:14

Bonjour

Désolé je suis un peu en retard, voici un fichier essai avec un mixte de tous les types de champs que l'on pourrait trouver dans les documents sur lesquels je voudrais insérer le code JavaScript. J'ai essayé le code que vous m'avez envoyé, j'ai ajouté 2 parenthèses qu'il manquait mais ça bugge et il tourne en continu, je ne peux pas fermer la boite d'alerte, je suis obligé de faire un arrêt complet du fichier PDF.

Je n'avais pas pensé en effet à noter les champs avec le même type de nom (cacAverifier, texteAverifier...). pour les prochains documents je pourrais appliquer ça en effet, si le programme que vous m'avez envoyé fonctionne.

Mais pour éviter de reprendre tous les autres documents si il y a une solution qui fonctionne avec ce fichier joint se serait mieux. :geek: pour finaliser j'ai laissé les types de nom qu'il y a sur mes champs comme "case à cocher_1", "nom_1", etc...
Merci en tout cas pour vos réponse, ce fichier sera surement plus facile pour entrevoir ce que je voulais dire

Ah j'oubliais si il y a possibilité, lorsque la case vérification du dossier effectué est cochée le bouton devient alors inactif
À très bientôt j'espère ne pas vous avoir fait trop peur :jerisjaune:



IP archivée


Merlin  03 décembre 2019 : 00:45

Mille excuses, il y avait quelques parenthèses et accolades mal placées. Corrigé et testé :

var nCompteur = 0;
for (var i=0; i<this.numFields; i++) {
strName = this.getNthFieldName(i);
if ((/obligatoire/.test(strName)) && ((this.getField(strName).value == "") || (this.getField(strName).value == "Off"))) {
nCompteur = nCompteur+1;
}
}
if (nCompteur == 0) {
app.alert("OK");
}
else {
app.alert("KO");
}

IP archivée


bebarth  03 décembre 2019 : 09:20

bonjour,
...ce fichier sera surement plus facile pour entrevoir ce que je voulais dire
Effectivement et cela me conforte à te dire qu'il faut être plus rigoureux dans les noms des champs parce que sinon comment veux-tu faire la différence entre ceux qui doivent être pris en compte et ceux qui ne le doivent pas ?
Ici, dans le script il faudrait citer pratiquement tous les noms des champs...
@+
 :bonjour:

IP archivée


RemiB  03 décembre 2019 : 09:58

Bonjour en cherchant une solution du même type je me suis demandé si on ne pouvait pas faire ça en utilisant les propriété du champ type "required==true" parce que ça m'arrangerai.

je vous met en lien mon formulaire (Merlin & Bebarth, oui c'est toujours le même  :siffle: ) mon objectif est le suivant :

j'ai certains champs qui ne deviennent obligatoires que lorsque qu'un autre est rempli par exemple en page 4 dans le tableau des formations, le champ motivation de l'évaluateur devient obligatoire si le champ intitulé correspondant est rempli. Pour cela j'utilise le script suivant en script de calcul personnalisé pour le champ "intitulé de la formation" :
if (event.target.value=="") {
    this.getField("Motivation_de_l_evaluateur_Row1").required=false;
} else {
    this.getField("Motivation_de_l_evaluateur_Row1").required=true;
}


et donc en page 5 j'ai besoin (pour éviter que des débiles ne signent le formulaire avant que tous les champs obligatoires ne soient remplis) que le champ "signature de l'évaluateur" reste masqué tant qu'il reste un champ obligatoire vide. J'ai bricolé ce script qui ne fonctionne pas :
var ncompteur=0;
for (var k=0; k<this.numFields; k++) {
    var fname = this.getNthFieldName(k);
    var f = this.getField(fname);
    if (f.required==true && (f.value=="" || f.value=="Off")) { ncompteur = ncompteur+1;
      }
}
if (ncompteur==0) {
     this.getField("Signature_evaluateur").display=display.visible;
} else {
   this.getField("Signature_evaluateur").display=display.hidden;
    }
Je n'utilise pas "i" et "j" comme variables car elles sont déjà utilisée pour le script de matricule en page 1  :doute: le "f.value..." me permet de vérifier si le champ est vide ou si un bouton radio est off (enfin je crois^^)

Bref, je comprends pourquoi ce code ne me donne pas le résultat que je souhaite mais j'avoue sécher sur la façon de le corriger, en fait il faudrait qu'il vérifie si le champ est obligatoire uniquement entre le premier champ de la page 1 et le champ "Date_evaluateur_es_:date" en page 4 inclus.

Merci d'avance pour votre aide toujours précieuse  :Smiley08:

IP archivée


Merlin  03 décembre 2019 : 10:11

J'ai bricolé ce script qui ne fonctionne pas : Remplace : if (f.required==true && (f.value=="" || f.value=="Off"))
Par : if ((this.getField(strName).required == true) && ((this.getField(strName).value == "") || (this.getField(strName).value == "Off")))

Je n'utilise pas "i" et "j" comme variables car elles sont déjà utilisée pour le script de matricule en page 1Quand on met "var" devant une variable c'est pour l'enfermer dans sa boucle ou dans sa fonction, dont elle ne peut pas sortir.
Dans le cas contraire c'est le dernier qui a parlé qui a raison, ce qui dans le cas d'un index ne changerait pas grand-chose.
Donc on peut utiliser "i" et "j" autant de fois qu'on veut dans des boucles ou des fonctions différentes.

il faudrait qu'il vérifie si le champ est obligatoire uniquement entre le premier champ de la page 1 et le champ "Date_evaluateur_es_:date" en page 4 inclus. On peut détecter l'ordre des champs par page mais pas par leur position dans la page.

IP archivée


RemiB  03 décembre 2019 : 12:10

Merci beaucoup @Merlin !

après avoir testé les modifs, je me suis rendu compte que cela fonctionnai ma pas comme je voulais, j'ai donc testé les champs en ajoutant en fin de code :

app.alert("champs obligatoires restants "+ncompteur+"   Nom du champ"+strName)

ce qui m'a permis de voir le nombre de champs obligatoires restants et le nom du champ sur lequel le script arretait son calcul. Bien entendu avec le code ecrit comme ça :
for (var k=0; k<this.numFields; k++)
il s'arrête sur le dernier champ de la dernière page mais c'est un pur hasard  :geek: pcq ce champ est le dernier champ dans l'ordre alphabétique.

J'explique en fait j'ai modifié le code ci-dessus en remplaçant k<this.numFields par k<10, k<20, k<12 du coup j'avais l'affichage du champ correspondant au numéro 10, 20, 12, etc. Je pensais que les champs étaients numérotés par ordre sur la page voire par ordre de tabulation mais en réalité ils sont numérotés par ordre alphabétique... je vais donc renommer mes champs en fonction afin que je puisse arrêter le compteur sur le champ qui m'intéresse et prendre en compte tous les champs précédents.

Comme d'hab, merci pour votre aide rapide ;)

IP archivée


bebarth  03 décembre 2019 : 12:51

bonjour,
...mais en réalité ils sont numérotés par ordre alphabétique...
Ce n'est pas exactement vrai, et je n'ai à vrai dire pas compris comment ils étaient numérotés exactement...
Sais-tu que dans l'abarcadabraTools il y a un très bon utilitaire ( :geek: ) "Propriétés d’un champ" qui t'indique entre autre le numéro du champs, et tu remarqueras (dans la liste des champs par exemple qui est données dans l'ordre des champs) qu'ils sont presque tous classés par ordre alphabétique, sauf les derniers.
https://www.abracadabrapdf.net/utilitaires/acrobat-plugins/abracadabratools/
@+
 :bonjour:

IP archivée


RemiB  03 décembre 2019 : 13:57

Merci pour l'info @Bebarth !

Citer
Ce n'est pas exactement vrai, et je n'ai à vrai dire pas compris comment ils étaient numérotés exactement...

Vu l'ordre des champs je me demande si ce n'est pas de ma faute et juste une histoire de Majuscule au début des champs  :Euuuh: ce qui confirmerait la numérotation par ordre alphabétique respectant la casse  :doute: ... ça me paraît être une hypothèse valide car les champs sont dans l'ordre alphabétique de "Appreciation_sup" à "Vu..." puis ensuite ça revient à "appreciation globale" et reprend l'ordre alphabétique jusqu'à "signature.."

je vais tester !

et merci pour le lien vers le complément abracadrabratools  :Smiley08:

IP archivée


gwenicrocket  03 décembre 2019 : 18:14

Mille excuses, il y avait quelques parenthèses et accolades mal placées. Corrigé et testé :
Bonjour Merlin j'ai essayé ton code :
- que sur les champs nom cela fonctionne- sur les case à cocher en revanche cela fonctionne que quand les cases sont cocher oui , si une case est coché non cela ne fonctionne plus idem pour ne sais pas.les cases à cocher oui , non et ne sais pas ont le même numéro pour qu'il n'y ai qu'une coche possible sur les 3 cases du coups c'est leur valeur qui est différente :oui à valeur true
non à valeur false
et ne sais pas à valeur no

bonjour  bebarth,si j'ai bien compris je suis obligé de renommer tous mes champs :mur: il n'existe pas de programme qui test les champs peut importe leur nom et qui dit quel champ  est vide...?
Par contre est ce que je peux mettre cacAverifier pour les case à cocher et nomAverifier pour les champs contenant les noms, puis obsAverifier pour les champs observations,etc....suivi de numéro qui s'incrémente.Ou il faut que tous mes champs s'appelle Averifier puis un numéro, car le programme ne teste pas un morceau de mot dans le nom du champs mais le mot entier...?ensuite est ce que cela pose problème si un numéro de champs est ajouté par la suite en plein milieu qui fait que l'on passe de 1,2,3,4 à 125 puis 6,7,8...?

bonjour remiB.....j'ai pas tout compris en fait

IP archivée


Merlin  03 décembre 2019 : 19:40

Citer
- que sur les champs nom cela fonctionne- sur les case à cocher en revanche cela fonctionne que quand…
Quand j'ai testé ça fonctionnait avec les cases à cocher.
Quand une case ou une série de cases (même nom) n'est pas cochée la valeur renvoyée est "Off", donc pour le coup on se fiche pas mal de la valeur renvoyée quand c'est coché puisque seul le cas inverse nous intéresse.
 :Smiley03:

Citer
Par contre est ce que je peux mettre cacAverifier pour les case à cocher et nomAverifier pour les champs contenant les noms, puis obsAverifier pour les champs observations,etc....suivi de numéro qui s'incrémente.Ou il faut que tous mes champs s'appelle Averifier puis un numéro…
Tu mets "obligatoire" ou "Averifier" ou n'importe quoi d'autre, il faut juste que les champs à vérifier aient tous un tronc commun dans leurs noms.
Tu peux nommer les champs :
P1.case.Averifier.blablabla
ou
P1caseAverifierblablabla
ça n'y changera rien, ce qui compte c'est que la chaine de caractères "Averifier" soit dedans.
Par-contre attention : comme le JavaScript, le GREP est sensible à la casse, donc "Averifier", "averifier" et "aVerifier" ce n'est pas la même chose.


IP archivée


gwenicrocket  03 décembre 2019 : 19:56

Quand j'ai testé ça fonctionnait avec les cases à cocher.

je vais réessayer demain en nommant correctement les champs .les case à cocher ont bien fonctionné au départ c'est quand j'ai coché non sur une que ça ne fonctionnait pas ( enfin disons que ça marquait KO au lieu de OK), je posterai demain le résultat.par contre comment fais tu pour identifié un champs qui est off et le nommer dans la boite d'alerte?

IP archivée


RemiB  04 décembre 2019 : 09:43

Bonjour à tous,

Après vérification et renommage hier je vous confirme que les champs sont numérotés dans l'ordre alphabétique et voici le code corrigé, testé et utilisé pour mon formulaire :
var ncompteur=0;
// mettre k<this.numFields pour tester tous les champs du document ou k<n°du champ où vous souhaitez arrêter la vérification
for (var k=0; k<92; k++) {
    var strName = this.getNthFieldName(k);
//teste si le champ est obligatoire ET vide ou sur "Off" pour les boutons radios et cases à cocher
    if ((this.getField(strName).required == true) && ((this.getField(strName).value == "") || (this.getField(strName).value == "Off")))
//ajoute 1 à chaque fois qu'un champ obligatoire est vide
{ ncompteur = ncompteur+1;
      }
}
//affiche le champ de signature si ncompteur vaut zero et le masque dans le cas contraire
if (ncompteur==0) {
     this.getField("093_Signature_evaluateur").display=display.visible;
} else {
   this.getField("093_Signature_evaluateur").display=display.hidden;
    }

fonctionner avec les propriétés du champ plutôt qu'avec une chaîne de caractères dans le nom des champs me permet de prendre en compte des champs qui ne sont pas forcément obligatoires à l'ouverture du formulaire mais qui peuvent le devenir sous conditions par exemple via le script :
if (event.target.value=="") {
    this.getField("083_Motivation_de_l_evaluateur_Row1").required=false;
} else {
    this.getField("083_Motivation_de_l_evaluateur_Row1").required=true;
}

dernier point sur les valeurs des cases à cocher et des boutons radios :
Quand j'ai testé ça fonctionnait avec les cases à cocher.
Quand une case ou une série de cases (même nom) n'est pas cochée la valeur renvoyée est "Off", donc pour le coup on se fiche pas mal de la valeur renvoyée quand c'est coché puisque seul le cas inverse nous intéresse.
 :Smiley03:

Petite précision sur les cases à cocher, les boutons radios et autres éléments auquels on peut attribuer une valeur d'exportation : faire attention aux valeurs que vous choisissez si vous souhaitez faire des calculs avec après car un zéro en valeur d'exportation est considéré comme "Off" (#truestory) ça m'a bien fait galérer hier soir où le code donnait l'impression de marcher aléatoirement  :Euuuh: :geek: j'ai fini par m'en rendre compte en ajoutant un bout de code dans le if (ncompteur==0) pour qu'il m'affiche la valeur de ncompteur (qui correspond en fait au nombre de champs obligatoire vides) et pour une série de boutons radios dont les valeurs sont 100, 75, 50, 0 il m'affichait ncompteur=1 quand c'etait le bouton valant zéro coché et ncompteur=0 quand pour un bouton ayant une valeur non nulle.

Voilà voilà, je sais pas si tout ça est très clair mais encore merci pour toute l'aide que vous apportez notamment Merlin et Bebarth

Bonne journée

IP archivée


Merlin  04 décembre 2019 : 11:02

Citer
Après vérification et renommage hier je vous confirme que les champs sont numérotés dans l'ordre alphabétique
J'avais oublié de répondre à cette question : l'ordre des champs est affiché dans le panneau des outils formulaire d'Acrobat Pro.
 :joker:


Citer
Petite précision sur les cases à cocher, les boutons radios et autres éléments auquels on peut attribuer une valeur d'exportation : faire attention aux valeurs que vous choisissez si vous souhaitez faire des calculs avec après car un zéro en valeur d'exportation est considéré comme "Off"
:tutut:
Non.
La valeur d'exportation n'est renvoyée que si la case est cochée, si elle n'est pas cochée elle renvoie "Off".
Si une case a une valeur d'exportation de 0 (zéro) elle renvoie "0" quand elle est cochée et "Off" quand elle ne l'est pas.

Ta demande initiale c'était de détecter les champs vides et les groupes de cases non cochés, pas de détecter les cases cochées "Non" qui renvoient "0" (mais c'est faisable).
 :Smiley15:

IP archivée


Merlin  04 décembre 2019 : 11:16

Citer
fonctionner avec les propriétés du champ plutôt qu'avec une chaîne de caractères dans le nom des champs me permet de prendre en compte des champs qui ne sont pas forcément obligatoires à l'ouverture du formulaire mais qui peuvent le devenir sous condition

Rien n'interdit d'utiliser les deux en même temps !  :Smiley08:

if (/obligatoire/.test(strName)) && (this.getField(strName).required == true) {
// blablabla
}

strName est le nom du champ (en variable).

IP archivée


RemiB  04 décembre 2019 : 12:05

:tutut:
Non.
La valeur d'exportation n'est renvoyée que si la case est cochée, si elle n'est pas cochée elle renvoie "Off".
Si une case a une valeur d'exportation de 0 (zéro) elle renvoie "0" quand elle est cochée et "Off" quand elle ne l'est pas.

il doit y avoir une subtilité qui m'échappe  :Euuuh: à laquelle tu auras peut-être une explication.

Dans le doc test en pièce jointe, tu verras que lorsque que tu choisis un bouton radio dont la valeur est zéro le champ de signature reste masqué alors que si tu en choisis un du même groupe avec une valeur non nulle le champ de signature apparaît  :oh:

pour info le script de vérification est en script de calcul personnalisé dans le champ de date.


IP archivée


Merlin  04 décembre 2019 : 15:14

Mea culpa !!!   :oh: :oh: :oh:
Je m'étais déjà fait avoir et apparemment je n'ai pas fini…  :oh:

Le "OU" JavaScript est un "OU paresseux", donc dans cette ligne la dernière condition, en orange, ne s'exécute pas forcément et certains champs passent à l'as :
if ((this.getField(strName).required == true) && ((this.getField(strName).value == "") || (this.getField(strName).value == "Off")))

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 :

var ncompteur=0;
for (var k=0; k<this.numFields; 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;
}


PS : une case à cocher (checkbox) n'est pas un bouton-radio (radiobutton), et vice-versa !
 :Smiley03:

IP archivée


RemiB  04 décembre 2019 : 15:59

Effectivement c'est subtil  :geek: j'aurais jamais trouvé la raison !!

Merci pour la réponse et pour la correction du code, ça marche impeccable.

Du coup j'avais triché en attribuant 0.01 comme valeur au lieu de 0 pour avoir une influence plus que négligeable sur les calculs  :Smiley00:



IP archivée


gwenicrocket  04 décembre 2019 : 17:52

bonsoir à tous,bon j'ai réessayé le code en mettant obligatoire à tous mes champs et ça fonctionne, mille excuse Merlin  :Smiley00: par contre ça fonctionne que si je change la valeur de la case à coché non, au lieu de mettre "false" je mets autre chose comme "yes" et là tout fonctionne sinon il y a bien une subtilité. je sais pas pourquoi.
je vais essayer de voir l'autre code que tu as mis merlin si j'arrive à le comprendre pour éviter le risque d'erreur.par contre pour ce qui est d'identifier le champs qui est vide et de le faire apparaitre dans la boite de dialogue  comment peut on faire?

IP archivée


gwenicrocket  04 décembre 2019 : 18:06


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 :

var ncompteur=0;
for (var k=0; k<this.numFields; 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?

IP archivée


bebarth  04 décembre 2019 : 18:39

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 :
if (oChamp.required == true && (((oChamp.type == "text") && (oChamp.value == "")) || ((oChamp.type == "checkbox") && (oChamp.value == "Off")))) ncompteur++;Attention aux parenthèses...
@+
 :bonjour:

IP archivée


gwenicrocket  04 décembre 2019 : 21:06

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.
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

IP archivée


bebarth  04 décembre 2019 : 21:33

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
...et en gros 2*if==&&  :geek:

@+
 :bonjour:

IP archivée


Merlin  04 décembre 2019 : 23:28

Il y a 7 types de champs :

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

IP archivée


gwenicrocket  Hier à 21:16

bonsoir,
  • oChamp.required == true : si la case "Obligatoire" est cochée
@+
 :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 ?

IP archivée


bebarth  Hier à 21:51

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:

IP archivée