abracadabraPDF › Forums › PDF – Général › Script pour compter les champs restants à remplir
Étiqueté : Javascript
- Ce sujet contient 19 réponses, 4 participants et a été mis à jour pour la dernière fois par
Galactica, le il y a 4 années.
-
CréateurSujet
-
5 janvier 2022 à 10:39 #70281
bekan
ParticipantBonjour,
J’ai besoin d’un coup de main pour un script qui permet de compter les champs vides dans le but d’indiquer aux utilisateurs qu’ils doivent les remplir (avec un message en haut du document du type “il vous reste X champs à remplir”).
Avec les conditions suivantes :
- pour tous les champs indiqué comme “obligatoire” dans les propriétés et qui sont visibles à l’écran
- les champs doivent être rempli par au moins une lettre ou un chiffre (pas seulement un espace)
- listes déroulantes : le premier choix est “Sélectionner” pour préciser aux utilisateurs que c’est bien une liste déroulante, pour que ce soit compté comme un champ rempli il faut qu’il y ait autre chose que “Sélectionner” de choisi par l’utilisateur dans chaque liste déroulante
- case à cocher : il y en a 5 l’une au-dessus de l’autre, à compter comme s’il manquait 1 champ de rempli si aucune des 5 cases n’est cochée, s’il y a au moins une case cochée c’est ok. Pour les cases à cocher je ne peux pas indiquer “obligatoire” dans les propriétés car cela obligerait les utilisateurs à les cocher mais il faut que le script prenne en compte qu’au moins une case doit être cochée
Pour un autre cas comment modifier le script pour compter tous les champs (obligatoires ou non) non remplis des pages 1 à 5 (sans avoir à spécifier tous les noms de champs individuellement) ?
Merci d’avance.
-
CréateurSujet
-
AuteurRéponses
-
5 janvier 2022 à 14:59 #70284
bebarthMaître des clésbonjour,
J’espère que les explications seront assez claires :var nbChps=0;
// Vérifie tous les champs du document
for (var i=0; i<this.numFields; i++) {
var f=this.getField(this.getNthFieldName(i));
// Si le champ n'est pas un bonton et qu'il est requis
if (f.type!="button" && f.required==true) {
// Condition sans chiffe ni caractère
var reGex = /^\D&|^\W/;
// Si c'est un champ texte et que la valeur est vide ou si la condition est vraie
if (f.type=="text" && (f.value=="" || reGex.test(f.value))) nbChps++;
// Sinon si c'est un menu déroulant et la position est la première (basée sur 0)
else if (f.type=="combobox" && f.currentValueIndices==0) nbChps++;
}
}
// Pour tous les champs "cAC." de 0 à 4
for (var j=0; j<5; j++) {
// Si la case n'est pas cochée
if (this.getField("cAc."+j).value=="Off") {
nbChps++;
break; // Fin de boucle
}
}
// Affichage du message
if (nbChps!=0) {
if (nbChps==1) app.alert("Un champ n'est pas rempli.",3);
else app.alert(nbChps+ " champs ne sont pas remplis.",3);}Pour un autre cas comment modifier le script pour compter tous les champs (obligatoires ou non) non remplis des pages 1 à 5 (sans avoir à spécifier tous les noms de champs individuellement) ?
Pour cela, il faut adapter ce script en retirant la condition « f.required==true » et rajouter la condition « p.page<5 » (car 4 est la page N° 5 en annotation basé sur 0).
@+
😎Attachments:
You must be logged in to view attached files.5 janvier 2022 à 15:42 #70287
MerlinMaître des clésbebarth, tu crées des scripts astucieux qui m’épatent, mais là je crois que tu te casses la tête pour rien. 😉
Pour savoir si un champ a été rempli ou coché il n’y a pas besoin de savoir ce qu’il contient ni de savoir de quel type il est, il suffit de comparer sa valeur active avec sa valeur par défaut.
On peut donc simplifier le script ainsi :
var nbChps=0;
// Vérifie tous les champs du document
for (var i=0; i<this.numFields; i++) {
var f = this.getField(this.getNthFieldName(i));
// si le champ est obligatoire ET si sa valeur est égale à sa valeur par défaut
if (f.required==true && f.value == f.defaultValue) {nbChps++}
}
// Affichage du message
if (nbChps!=0) {
if (nbChps==1) app.alert("Un champ n'est pas rempli.",3);
else app.alert(nbChps+ " champs ne sont pas remplis.",3);
}5 janvier 2022 à 16:36 #70289bekan
ParticipantMerci beaucoup pour ce script mais je n’arrive pas à le faire fonctionner.
Je souhaiterais un champ texte que je place en haut du document et qui affiche « X champs ne sont pas remplis », ce champ disparait lorsque tous les champs sont remplis. Et à côté de ce champ je souhaiterais un bouton qui apparaît uniquement lorsqu’il y a le message, en cliquant dessus un pop up s’affiche en listant les info bulles des champs non complétés (les infobulles sont plus explicites que le nom des champs). J’ai l’impression que l’on est obligé de dissocier le message et le bouton car un champ qui affiche un message et que l’on peut cliquer n’est pas possible il me semble.
5 janvier 2022 à 16:47 #70290bekan
ParticipantJe n’arrive pas à modifier mon message.
Je souhaiterais un champ texte que je place en haut du document et qui affiche « X champs ne sont pas remplis », ce champ disparait lorsque tous les champs sont remplis. Si l’on clique dessus un pop up s’affiche en listant les info bulles des champs non complétés (les infobulles sont plus explicites que le nom des champs).
5 janvier 2022 à 18:25 #70292
bebarthMaître des clés… il suffit de comparer sa valeur active avec sa valeur par défaut. On peut donc simplifier le script ainsi :
@Merlin : C’est effectivement une méthode que je n’utilise pas, et ici elle ne convient pas !- On ne peut pas vérifier si l’utilisateur ne tape que des espaces.
- Ici on veut tester un ensemble de cases à cocher où il suffit qu’une seule soit différente de la valeur par défaut.
Il y avait quand même une erreur dans le comptage des cases à cocher.
Voici un nouveau fichier avec champ texte qui affiche le nombre de champs obligatoires restants à cocher.
@+
😎Attachments:
You must be logged in to view attached files.5 janvier 2022 à 18:59 #70299bekan
ParticipantC’est vraiment bien.
Il y a un défaut : les champs obligatoires mais dont l’affichage est parfois masqué sont comptés, c’est le cas d’un des éléments du menu déroulant qui fait apparaitre un autre champ à remplir. Il y a un display hidden à ajouter dans le script mais je ne sais pas où.
Quel script peut-on mettre dans l’onglet « Actions » du champ de texte pour afficher un pop up qui liste le contenu des infobulles des champs non complétés ?
6 janvier 2022 à 08:56 #70315bekan
ParticipantUne dernière chose qu’il serait bien d’intégrer : que le message « X champs ne sont pas complétés » ne s’affiche que lorsque l’utilisateur a complété au moins un champ afin d’éviter que le message soit affiché dès l’ouverture du fichier.
Merci d’avance
6 janvier 2022 à 09:48 #70316
MerlinMaître des clés« C’est effectivement une méthode que je n’utilise pas, et ici elle ne convient pas ! »
Oui, je n’avais pas fait attention aux cases. 😩
« Quel script peut-on mettre dans l’onglet « Actions » du champ de texte pour afficher un pop up qui liste le contenu des infobulles des champs non complétés ? »
Le plus simple, le plus ergonomique et le plus intuitif pour l’utilisateur final c’est de mettre un contour rouge aux champs obligatoires, contour qui devient transparent quand le champ est rempli. C’est très visuel, ça lui permet de voir l’avancement du remplissage au fur et à mesure et ça lui évite de chercher un intitulé (infobulle) obscur dans un document qui est farci d’intitulés de partout.
Et ça évite au développeur de devoir gérer des listes, des noms et un champ supplémentaire à affichage variable.
Pour faire ça dans chaque champ obligatoire je met un script en action « champ désactivé » qui vérifie si un « event » a eu lieu ou qui vérifie si le champ a été rempli, et qui change la couleur de contour en fonction du résultat.
6 janvier 2022 à 10:05 #70318
bebarthMaître des clésbonjour,
Voici une autre proposition avec champ masqué à l’ouverture et pop-up des champs non remplis.@+
😎Attachments:
You must be logged in to view attached files.6 janvier 2022 à 23:37 #70328bekan
ParticipantMerci du temps que vous passez pour m’aider.
Est-ce possible d’ajuster les éléments suivants :
- afficher le menuPop même quand il n’y a qu’1 champ non complété, actuellement il faut au moins 2 champs non complétés pour avoir le menuPop
- quand le menuPop s’affiche : est-ce possible de cliquer pour aller directement à la page du champ non complété ? Cela peut être très utile pour les fichiers avec beaucoup de pages.
- lorsqu’on rempli le formulaire et qu’on l’efface : le message des champs non remplis reste, est-ce que vous pouvez ajuster le code javascript pour que le message s’affiche uniquement lorsqu’au moins un champ a été complété afin que le message ne soit pas présent à l’ouverture du pdf ?
Bugs sur le fichier en pièce jointe :
- quand les 2 listes déroulantes sont sur « Sélectionner » le menuPop ne s’affiche pas
- quand Liste 1 est sur « Madame » par exemple et Liste 2 sur « Sélectionner » le menuPop ne s’affiche pas
- quand Liste 1 est sur « Sélectionner » et Liste 2 sur « Gérant » le menuPop s’affiche
- quand Liste 1 est sur « Sélectionner » et Liste 2 sur « Autre (préciser à côté) » le menuPop ne s’affiche pas, une fois que le champ « autre » a été complété le menuPop s’affiche.
Le menuPop n’a pas le même comportement selon les fichiers :
- dans votre fichier un survol de la souris l’affiche (ce qui est bien)
- dans mon fichier il faut cliquer sur le champ (ce qui est moins bien car il faut préciser aux utilisateurs de cliquer) alors que j’ai bien le même déclencheur que dans votre fichier
Attachments:
You must be logged in to view attached files.7 janvier 2022 à 16:40 #70333
bebarthMaître des clésbonjour,
1. afficher le menuPop même quand il n’y a qu’1 champ non complété, actuellement il faut au moins 2 champs non complétés pour avoir le menuPop
Il y a un message d’erreur dans la console pour 1 champ… et je ne comprends pas pourquoi ! Heureusement, ici c’est une autre méthode.
2. quand le menuPop s’affiche : est-ce possible de cliquer pour aller directement à la page du champ non complété ? Cela peut être très utile pour les fichiers avec beaucoup de pages.
3. lorsqu’on rempli le formulaire et qu’on l’efface : le message des champs non remplis reste, est-ce que vous pouvez ajuster le code javascript pour que le message s’affiche uniquement lorsqu’au moins un champ a été complété afin que le message ne soit pas présent à l’ouverture du pdf ?Ça c’est fait !
Bugs sur le fichier en pièce jointe :
Je n’ai pas remarqué ces bugs !
Le menuPop n’a pas le même comportement selon les fichiers :
dans votre fichier un survol de la souris l’affiche (ce qui est bien)
dans mon fichier il faut cliquer sur le champ (ce qui est moins bien car il faut préciser aux utilisateurs de cliquer) alors que j’ai bien le même déclencheur que dans votre fichierIl faut mettre le script en action « souris entée » et non en « souris relâchée ».
Ci-joint les résultats avec mon et ton fichier.
@+
😎Attachments:
You must be logged in to view attached files.15 janvier 2022 à 16:33 #70404bekan
ParticipantBonjour,
Merci pour les modifications qui ont été apportées.
J’ai voulu mettre un fond coloré au message indiquant que des champs ne sont pas complétés pour qu’il soit mieux visible mais la couleur ne se voit pas étant donné qu’il y a une coloration de base des champs remplissables faite par Adobe Reader (bleu clair). Je voulais mettre le champ en lecture seule mais on perd la fonction menuPop qui indique les champs non complétés.
Est-ce qu’il existe une astuce pour voir la couleur de fond du champ ou bien on peut uniquement mettre une bordure au champ pour qu’il soit mieux visible ?
15 janvier 2022 à 18:43 #70405
bebarthMaître des clésbonjour,
Tu peux rajouter cette ligne en script de document :
app.runtimeHighlight=false;
Ça va te désactiver la couleur des champs.@+
😎12 février 2022 à 20:02 #70583bekan
ParticipantMerci pour le script de document.
Est-ce que vous sauriez modifier le script qui indique les champs non complétés pour que l’affichage soit comme ci-dessous :
Page « X » -> « Nom de l’info-bulle du champ non complété »
(Actuellement « Nom de l’info-bulle du champ non complété », Page »X »)
Pour que la liste des champs non complétés dans le menuPop soient classés par numéro de page de la première à la dernière. Je n’arrive pas à modifier correctement le code pour que cela s’affiche bien à la fois pour les champs et les listes déroulantes avec le « -> » entre Page « X » et « Nom de l’info-bulle du champ non complété ».
Attachments:
You must be logged in to view attached files.14 février 2022 à 09:38 #70588
bebarthMaître des clésbonjour,
Voici une nouvelle proposition.@+
😎Attachments:
You must be logged in to view attached files.14 février 2022 à 10:08 #70590
MerlinMaître des clésUne telle liste est un non-sens ergonomique, comment un utilisateur pourrait-il se souvenir de la liste des noms de champs affichés s’il y en a plus de 3 ?
Voir ci-dessus mon message du 6 janvier.
17 février 2022 à 10:12 #70609bekan
ParticipantMerci beaucoup pour la modification du code.
@Merlin : c’est une liste cliquable, dans la plupart des cas les utilisateurs n’oublient pas de renseigner plus de 1 ou 2 champs, en cliquant sur le bouton ils auront l’affichage de ces quelques champs non remplis.17 février 2022 à 11:14 #70610
MerlinMaître des clésOK, je n’ai rien dit.
😇
17 février 2022 à 20:21 #70611Galactica
ParticipantBRAVO bebarth
quel code …. je garde au chaud …
un jour peut être je vais en avoir besoin… 😁😁😁
merci
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.
