Donnez vie à vos documents numériques !
 

Validation de valeur d’un champ de saisie

abracadabraPDF Forums PDF – Général Validation de valeur d’un champ de saisie

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #46609
    michel c.
    Participant

    Bonjour, j’ai un formulaire pdf qui permet d’obtenir une note calculée automatiquement. Celle-ci peut être un nombre entier ou décimal (compris entre 0 et 20)

    Les examinateurs peuvent alors proposer une autre note mais celle-ci doit être obligatoirement supérieure ou égale à la note calculée (et inférieure à 20)
    J’ai essayé ce script (en récupérant des bouts de code par ci par là) :

    Code:
    var noteproposee= this.event.value;
    if (noteproposee < this.getField("note20").value) {
    app.alert({cMsg:”La note proposée doit être supérieure ou égale à la note calculée”, nIcon:2});
    this.getField(“note20”).setFocus();
    };

    J’ai bien le message d’erreur qui s’affiche mais si l’utilisateur ferme la fenêtre, la valeur saisie reste incorrecte et la feuille peut alors être imprimée avec cette erreur.
    J’aimerais qu’à la place de la valeur proposée par erreur, s’inscrive la valeur arrondie au demi point supérieur ou égale à la valeur calculée.

    • Par exemple si la note calculée est 12.47 et que l’utilisateur propose une note = 12, j’aimerais que le message d’erreur s’affiche et que la valeur saisie soie modifiée pour une valeur = 12.5
    • si la note calculée est 12.00 et que l’utilisateur propose une note = 12, là, aucun message d’erreur et la note est acceptée
    • si la note calculée est 12.00 et que l’utilisateur se trompe et inscrit une note > 20 alors, j’aimerais que le message d’erreur s’affiche et que la valeur saisie soit modifiée pour une valeur = 12
    • [/list]J’avoue que je ne sais pas trop comment m’y prendre…
      Merci

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

    Bonjour et bienvenue

    C’est plus rapide à faire qu’à expliquer, et une fois fait c’est facile à comprendre.
    Tout ça pour dire que si tu pouvait partager tout ou partie de ton fichier la réponse serait plus facile.
    (Voir : https://abracadabrapdf.net/forum/index.php/topic,2974.0.html )

    #69268
    michel c.
    Participant

    Bonjour, effectivement c’est peut être plus simple en partageant le contenu.Ce document ne pouvant être public, voici un lien vers un document identique avec des zones masquées.
    document

    Il s’agit du champ nommé note20p ; dans ce document temporaire, j’ai utilisé un script pour le calcul d’une valeur arrondie au demi point supérieur car je n’arrivais pas à faire autrement mais il faudrait que l’examinateur puisse proposer la note qu’il souhaite et que celle ci valide les conditions suivantes :

    • valeur supérieure ou égale au champ “note20”
    • valeur inférieure ou égale à 20
    • uniquement une valeur entière ou avec 5 dixième comme valeur décimale acceptée uniquement
    • la valeur obtenue est ensuite utilisée pour le calcul du champ “note60”
    • [/list]Merci

    #69269
    Merlin
    Maître des clés

    Je te propose ce script (non testé), mais il ne vérifie pas le point n°3 (entier ou finissant par ,5). Je saurais vérifier si c’est un entier mais pour le ,5 je sèche…

    Code:
    var cMessage = “La valeur saisie n’est pas conforme, merci de recommencer.”;
    var nNotauto = Number(this.getField(“note20”).value);

    if (event.value.toString().length == 0) {
    event.rc = true;
    }

    else {

    if (event.value < nNotauto || event.value > 20) {
    app.alert(cMessage);
    }
    event.rc = false;

    else {
    event.rc = true;
    }
    }

    Concernant le point n°4, c’est simple : il faut créer un champ masqué qui calcule le “maximum” des deux champs “note20” et “note20p” et utiliser ce champ comme base de calcul pour le champ “note60”. Capture ci-joint.

    #69270
    Merlin
    Maître des clés

    Ce document ne pouvant être public, voici un lien vers un document identique avec des zones masquées

    Il m’a fallu environ 2,5 secondes pour afficher tout ce que tu avais masqué dans ce document (voir capture floutée).
    Pour vraiment supprimer (et non pas juste masquer) des éléments dans un PDF il faut utiliser la fonction “Biffure”, ou “Redact” en anglais.
    Du coup je te conseille de supprimer le lien vers ce document.
    :geek:

    #69271
    michel c.
    Participant

    Merci  pour le conseil, j’ai supprimé le lien vers le document.
    Je n’arrive pas à faire fonctionner le script. Qu’il soit déclenchée par une action (souris vers le bas) ou dans la validation de la valeur, rien n’y fait. Quelle que soit la valeur saisie, le message d’alerte n’apparait pas. Je vais continuer à chercher.
    Merci

    #69272
    michel c.
    Participant

    Avec ce code la boite d’alerte s’affiche mais si on la ferme, une saisie précédente incorrecte peut rester.

    Code:
    var noteproposee= this.event.value;
    var nNotauto = Number(this.getField(“note20”).value);

    if (noteproposee < nNotauto || event.value > 20) {
    app.alert({cMsg:”La valeur saisie n’est pas conforme, merci de recommencer.”, nIcon:2});
    }

    J’aimerais qu’en cas de saisie incorrecte, une valeur calculée par ce code remplace la valeur erronée :

    Code:
    this.getField(“note20p”).value = Math.ceil(this.getField(“note20”).value*2)/2

    merci

    #69273
    michel c.
    Participant

    Là j’ai un truc qui fonctionne à peu près ; il faut juste que je vois comment déclencher l’action : il ne faut pas que le document puisse être imprimé avec une valeur erronée :

    Code:
    var noteproposee= this.event.value;
    var nNotauto = Number(this.getField(“note20”).value);

        if (noteproposee < nNotauto || event.value > 20) {
    app.alert({cMsg:”La valeur saisie n’est pas conforme, merci de recommencer.”, nIcon:2});
        this.getField(“note20p”).value = Math.ceil(this.getField(“note20”).value*2)/2
        }

    #69274
    Merlin
    Maître des clés

    Ton script est bancal :

    – il est inutile de placer event.value en variable,

    – d’autant plus quand on l’utilise pas à chaque fois :
    if (noteproposee < nNotauto || event.value > 20)

    – pourquoi compliquer inutilement une simple multiplication par 3  ??? :
    this.getField(“note20p”).value = Math.ceil(this.getField(“note20”).value*2)/2

    Et mon script non testé n’était pas fonctionnel non plus…  :geek:

    Ci-joint une version fonctionnelle (et soigneusement biffée).
    :Smiley15:

    #69275
    michel c.
    Participant

    Merci pour la réponse, étant débutant en javascript, je tatonne pas mal et j’apprend un peu plus tous les jours…
    Je n’avais pas pensé au calcul de valeur par le maximum entre la note calculée et la note proposée.
    Merci encore pour ton aide précieuse.

    #69276
    michel c.
    Participant

    Message écrit par erreur, je viens de découvrir mon erreur après avoir relu mon message…

    #69277
    Merlin
    Maître des clés

    Merci pour la réponse, étant débutant en javascript, je tatonne pas mal et j’apprend un peu plus tous les jours…

    On est tous passé par là.
    :Smiley03:

    #69278
    michel c.
    Participant

    Bonsoir, j’espère ne pas être trop pénible avec mes questions, mais je voulais savoir pourquoi ce script :

    Code:
    if (this.getField(“b1”).isBoxChecked(0)) {
        this.getField(“aa1”).display = display.visible;
    }

    else {this.getField(“aa1”).display = display.hidden;
    }

    fonctionne correctement avec une seule checkbox b1 mais pas avec les autres ?

    • Je voudrais que si la checkbox a1a est cochée ; les checkbox b1 ne puissent pas être cochées et le champ aa1 apparaisse pour masquer le texte. (ça c’est ok)
    • et sinon, si une des 4 checkbox b1 est cochée, l’avertissement soit masqué par le champ aa1
    • [/list]En gros je souhaite que l’avertissement soit visible si aucune case n’est cochée sur la ligne…
      .
      .
      Je pensais avoir tout bon mais quand ça veut pas…Merci pour votre patience

      fichier

    #69279
    Merlin
    Maître des clés

    Bonsoir, j’espère ne pas être trop pénible avec mes questions, mais je voulais savoir pourquoi ce script :

    if (this.getField(“b1”).isBoxChecked(0)) {
        this.getField(“aa1”).display = display.visible;
    }
    else {this.getField(“aa1”).display = display.hidden;
    }

    fonctionne correctement avec une seule checkbox b1 mais pas avec les autres ?

    C’est à cause du zéro (en rouge ci-dessus), c’est lui qui indique à quelle case à cocher tu t’adresses, chacune à son numéro d’ordre comme on peut le voir dans la liste du panneau des champs :
    #0
    #1
    #2
    #3
    (image jointe).

    #69280
    michel c.
    Participant

    Merci beaucoup, tout fonctionne implacablement bien maintenant.
    J’ai en plus trouvé sur un autre fil un moyen de faire ce qu’il me manquait : faire apparaitre en rouge les champs non remplis.
    Je ne connaissais rien à la programmation avant de me mettre aux formulaires pdf et je trouve cela très intéressant.
    Avez vous un ouvrage à conseiller (en français) pour que je puisse m’y mettre sérieusement ?

    #69281
    Merlin
    Maître des clés

    Toutes les meilleures références concernant JavaScript sont ici :
    https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/ressources-pdf-javascript/

    Mais il va falloir copiner avec Googol Traduction car il n’y a rien en français.
    :geek:

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