Donnez vie à vos documents numériques !
 

Script pour compter les champs restants à remplir

abracadabraPDF Forums PDF – Général Script pour compter les champs restants à remplir

Étiqueté : 

  • Créateur
    Sujet
  • #70281
    bekan
    Participant

    Bonjour,

    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.

Affichage de 19 réponses de 1 à 19 (sur un total de 19)
  • Auteur
    Réponses
  • #70284
    bebarth
    Maître des clés

    bonjour,
    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.
    #70287
    Merlin
    Maître des clés

    bebarth, 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);
    }

    #70289
    bekan
    Participant

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

    #70290
    bekan
    Participant

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

    #70292
    bebarth
    Maî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.
    #70299
    bekan
    Participant

    C’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 ?

     

    #70315
    bekan
    Participant

    Une 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

    #70316
    Merlin
    Maî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.

    #70318
    bebarth
    Maître des clés

    bonjour,
    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.
    #70328
    bekan
    Participant

    Merci du temps que vous passez pour m’aider.

    Est-ce possible d’ajuster les éléments suivants :

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

    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.
    #70333
    bebarth
    Maître des clés

    bonjour,

    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 fichier

    Il 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.
    #70404
    bekan
    Participant

    Bonjour,

    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 ?

    #70405
    bebarth
    Maître des clés

    bonjour,
    Tu peux rajouter cette ligne en script de document :
    app.runtimeHighlight=false;
    Ça va te désactiver la couleur des champs.

    @+
    😎

    #70583
    bekan
    Participant

    Merci 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.
    #70588
    bebarth
    Maître des clés

    bonjour,
    Voici une nouvelle proposition.

    @+
    😎

    Attachments:
    You must be logged in to view attached files.
    #70590
    Merlin
    Maître des clés

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

    #70609
    bekan
    Participant

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

    #70610
    Merlin
    Maître des clés

    OK, je n’ai rien dit.

    😇

    #70611
    Galactica
    Participant

    BRAVO bebarth

    quel code …. je garde au chaud …

    un jour peut être je vais en avoir besoin…  😁😁😁

    merci

     

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