Validation de valeur d'un champ de saisie  (Lu 490 fois) Partager ce sujet Imprimer

1 B


michel c.  24 mai 2021 : 20:01

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à) :
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
J'avoue que je ne sais pas trop comment m'y prendre...
Merci

IP archivée


Merlin  25 mai 2021 : 15:58

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 )

IP archivée


michel c.  25 mai 2021 : 16:21

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



IP archivée


Merlin  26 mai 2021 : 09:34

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…

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.

IP archivée


Merlin  26 mai 2021 : 09:39

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:

IP archivée


michel c.  26 mai 2021 : 11:19

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

IP archivée


michel c.  26 mai 2021 : 11:42

Avec ce code la boite d'alerte s'affiche mais si on la ferme, une saisie précédente incorrecte peut rester.
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 : this.getField("note20p").value = Math.ceil(this.getField("note20").value*2)/2merci



IP archivée


michel c.  26 mai 2021 : 12:34

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 :
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
    }

IP archivée


Merlin  27 mai 2021 : 13:24

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:

IP archivée


michel c.  27 mai 2021 : 15:59

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.

IP archivée


michel c.  27 mai 2021 : 17:11

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

IP archivée


Merlin  27 mai 2021 : 19:38

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:

IP archivée


michel c.  27 mai 2021 : 20:51

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

IP archivée


Merlin  27 mai 2021 : 23:51

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

IP archivée


michel c.  29 mai 2021 : 07:25

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 ?

IP archivée


Merlin  29 mai 2021 : 10:03

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:

IP archivée