Cocher une case en fonction de plusieurs conditions  (Lu 166 fois) Partager ce sujet Imprimer

1 B


gwenicrocket  10 octobre 2020 : 13:01

Bonjour

Je vous joint un petit formulaire pour expliquer. Je souhaite mettre un codage sur chaque champ texte signature qui se lancerait lorsque l'on sort du champ, donc avec "champ désactivé", qui viendrait cocher la case à cocher du sommaire pour refléter l'état de remplissage du questionnaire de la dite page.
Je m'explique :
- la personne écrit son nom dans le champ signature, dès qu'elle sort du champ la case à cocher du sommaire se cocherait si tout était coché "oui" sur la page où est la signature, la case à cocher oui du sommaire de la page concerné se cocherait (les cases à cocher oui ont la valeur Yes).
- si une ou plusieurs cases du formulaire sont cochées "non",  la case à cocher "non" du sommaire se cocherait (les cases à cocher "non" ont la valeur no)
- en revanche si une case ou plusieurs ne sont pas cochées, la case à cocher du sommaire doit rester décochée même si "non" est coché et la case du sommaire doit resté décochée aussi si le champ signature de la page est vide.

J'ai trouvé un codage sur le forum pour le champ signature page 1
J'ai essayé en gros ceci : en première condition de tester
- si le champ signature page 1 est non vide, dans ce cas si une des cases page 1 n'est pas cochée > ne pas cocher la case page 1 du sommaire,
- sinon si une des cases page 1 est cochée "non" > cocher "non" sur la case page 1 du sommaire,
- sinon si toutes les cases page 1 sont cochées "oui" > cocher "oui" sur la case page 1 du sommaire
- sinon si le champ signature page 1 est vide : la case à cocher du sommaire page 1 reste décochée.

J'ai essayé avec "switch", en remplaçant "substr" par Name pour faire une condition, bref rien ne fonctionne.
En gros pour le moment j'ai ce bout de code qui fonctionne, qui me trouve tous les champs à tester, mais si je rajoute d'autres conditions ça ne marche plus (j'avais mis strockeColor pour voir s'il trouvait les champs à tester).

for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (nomChamp.substr(0,5)=="page1") this.getField(nomChamp).strokeColor= color.red;
}

Après il est peut être possible de faire un code générique pour tester les champs qui sont sur la page du champ signature et de cocher la case qui porte le nom de cette page pour que ce soit plus simple je ne sais pas mais dans ce cas ces 2 codes m'intéressent.

Merci pour vos futures réponses.

IP archivée


bebarth  10 octobre 2020 : 21:47

bonsoir,
Voici un script que tu peux mettre en champ désactivé de tous tes champs "signaturepage".// 13 = nombre de caractères du début du nom des champs "signaturepage"
var indice=event.target.name.substr(13);
if (event.value=="") {
    this.getField("Page"+indice).value="Off";
} else {
    for (var i=1; i<=7; i++) {
        if (this.getField("page"+indice+"question_"+i).value=="no") {
            this.getField("Page"+indice).value="no";
            break;
        } else {
            this.getField("Page"+indice).value="Yes";
        }
    }
}
@+
 :bonjour:

IP archivée


gwenicrocket  11 octobre 2020 : 00:27

merci mille fois bebarth.Je me suis permis de modifier le code car il manquait une condition : le cas ou si une des cases n'est pas cochée il faut que sur le sommaire ce ne soit pas coché. mais du coup je me demande si il faut mettre if ou else if pour la condition qui suit avec no.
// 13 = nombre de caractères du début du nom des champs "signaturepage"var indice=event.target.name.substr(13);
if (event.value=="") {
    this.getField("Page"+indice).value="Off";
} else {
    for (var i=1; i<=7; i++) {     
        if (this.getField("page"+indice+"question_"+i).value=="Off")
         { this.getField("Page"+indice).value="Off";
            break;     
      } if (this.getField("page"+indice+"question_"+i).value=="no") {            this.getField("Page"+indice).value="no";
            break;
        } else {
            this.getField("Page"+indice).value="Yes";
        }
    }
}
@+
 :bonjour:

IP archivée


bebarth  11 octobre 2020 : 07:20

bonjour,
Effectivement !
Vu qu'il n'y a que 3 possibilités (Yes, no, Off), le plus simple est alors d'écrire :
// 13 = nombre de caractères du début du nom des champs "signaturepage"
var indice=event.target.name.substr(13);
if (event.value=="") {
    this.getField("Page"+indice).value="Off";
} else {
    for (var i=1; i<=7; i++) {
        if (this.getField("page"+indice+"question_"+i).value!="Yes") {
            this.getField("Page"+indice).value="no";
            break;
        } else {
            this.getField("Page"+indice).value="Yes";
        }
    }
}
@+
 :bonjour:

IP archivée


gwenicrocket  11 octobre 2020 : 13:52

Bonjour bebarth,

Je préfère garder le code d'avant car je souhaite que si une case n'est pas remplie sur une des pages où il y a les questions, alors la case du sommaire reste décochée, ceci pour que ça interpelle : la case n'est pas cochée donc il y a un oubli.
Avec le code que tu m'a renvoyé si on oublie une case cela coche "non".

Par contre j'ai une seconde question : sur certaines pages j'ai des champs texte où je rentre des valeurs, si celles-ci ne sont pas bonnes la valeur apparait en rouge avec ce code situé après la condition :
(this.getField("resultat").textColor=color.red)
J'ai voulu donc ajouter une condition supplémentaire dans le code mais ça ne fonctionne pas, je pense que ça doit être la façon d'écrire en JavaScript comment vérifier si la couleur du texte est rouge qui ne doit pas être bonne, mais je ne sais pas du coup comment écrire cette condition, voici le code :
if (this.getField("page"+indice+"question_"+i).value=="no" || this.getField("page"+indice+"question_"+i)[b].textColor=="color.red"[/b]) { this.getField("Page"+indice).value="no";            break;
Merci

IP archivée


bebarth  11 octobre 2020 : 15:17

Au lieu de mettre des valeurs Yes ou no pour tes cases à cocher, mets plutôt 1 (pour Yes) et 0 (pour no), et tu écris :
// 13 = nombre de caractères du début du nom des champs "signaturepage"
var indice=event.target.name.substr(13);
if (event.value=="") {
    this.getField("Page"+indice).value="Off";
} else {
    var teste=1;
    for (var i=1; i<=7; i++) {
        var teste=teste*this.getField("page"+indice+"question_"+i).value;
        if (teste==1) this.getField("Page"+indice).value=1;
        else if (teste==0) this.getField("Page"+indice).value=0;
        else this.getField("Page"+indice).value="Off";
    }
}
Pour vérifier si le texte est en rouge, tu écris :
if (this.getField("page"+indice+"question_"+i).textColor=="RGB,1,0,0")@+
 :bonjour:

IP archivée


gwenicrocket  11 octobre 2020 : 21:44

Merci pour tout bebarth, j'ai tout ce qu'il me faut maintenant.
À bientôt pour d'autres sujets, ce forum est vraiment extra.

:bonjour:

IP archivée