Action sur tous les champs commençant par...  (Lu 102 fois) Partager ce sujet Imprimer

1 B


micka92  21 mai 2020 : 22:16

Bonsoir,


J'ai besoin d'effectuer une action de type this.getField("champ").readonly = false; sur tous mes champs qui commencent par la chaîne de caractère "facture". J'ai tenté en vain de créer une boucle, d'utiliser la fonction substr() mais ça ne donne rien de bon. Je commence à avoir la tête en vrac à "coder" depuis ce matin. Si une âme charitable pouvait me prêter main forte.  :priere:

IP archivée


micka92  22 mai 2020 : 08:28

A force d'abnégation et avec une tête un tant soit peu reposée, j'ai trouvé la solution à mon problème :
for (var i = 0; i < this.numFields; i++)
{
var f = this.getNthFieldName(i);
if ((f.substring(0,7) == "facture"))
{this.getField(f).readonly = false;}
}

IP archivée


bebarth  22 mai 2020 : 09:02

bonjour,
Ta façon d'écrire m'a un peu perturbé dans un premier temps car la plupart du temps on utilise la lettre "f" comme variable de l'objet champ et non comme son nom... mais ça fonctionne.
Moi j'aurais écrit :
for (var i=0; i<this.numFields; i++) {
    var nomChamp=this.getNthFieldName(i);
    if (nomChamp.substr(0,7)=="facture") this.getField(nomChamp).readonly=false;
}
Mon avis (mais juste le mien) lorsqu'on a juste une propriété à traiter, ce n'est pas la peine de mettre l'objet en variable, mais si on en a plusieurs ça vaut le coup.
Ici par exemple tu ne vérifie que le nom, mais si tu voulais vérifier le type de champ et la page par exemple ce serait effectivement plus simple décrire :
...
var nomChamp=this.getNthFieldName(i);
var f=this.getField(nomChamp); // On peut également écrire directement var f=this.getField(this.getNthFieldName(i))
if (f.name=="AZERT" && f.type=="text" && f.page==1253) ...
Mais ce n'est que mon avis !
@+
 :bonjour:


IP archivée


Merlin  22 mai 2020 : 10:12

Bonjour

Si tu utilisais la Convention de dénomination des champs de formulaire tout serait beaucoup plus simple.
Tu pourrais te contenter d'écrire :

this.getField("facture").readonly = false;

pour manipuler tous les champs dont le nom commence par "facture".

Voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/

 :Smiley15:

IP archivée


micka92  22 mai 2020 : 18:51

Merci à vous deux pour votre aide précieuse !  :bonjour:

IP archivée


micka92  22 mai 2020 : 19:08

Savez-vous s'il est possible d'écrire le code ci-après d'une autre manière ? En effet, celui-ci fonctionne bien sur PC mais pas sur tablette (PDF Expert). Je sais qu'il existe une section dédiée à la mobilité mais comme elle est peu utilisée... Mon but est simplement de savoir si ce script peut être codé différemment. Sinon, j'en déduirai que la fonction n'est pas supportée sur PDF Expert.
var Numero=app.response({
      cQuestion: "Indiquez ici le numero souhaite.",
      cTitle: "Numero souhaite",
      cLabel: "Numero souhaite :",
      cDefault: "",
   });


this.getField("numero").value=Numero;

IP archivée


Merlin  23 mai 2020 : 10:56

Sinon, j'en déduirai que la fonction n'est pas supportée sur PDF Expert.
Je crois qu'il ne faut pas chercher plus loin.

Cependant, ton script utilise plusieurs fois le même mot "numero" dans 3 situations différentes :
- nom du champ,
- nom de la variable,
- texte de l'alerte.
Ce qui est toujours une très mauvaise idée.

Je le verrais mieux ainsi :


var nNumero = app.response({
   cQuestion: "Indiquez ici le num\u00E9ro souhait\u00E9.",
   cTitle: "Num\u00E9ro souhait\u00E9",
   cLabel: "Num\u00E9ro souhait\u00E9 :",
   cDefault: "",
});

this.getField("numero").value = nNumero;


Concernant la gestion des caractères accentués dans les alertes voir : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/pdf-javascript-et-unicode/

IP archivée


micka92  23 mai 2020 : 12:36

Dans mon script réel, il n'y a pas de redondance avec "numero". C'était juste pour mon exemple. Et j'ai également supprimé les caractères spéciaux dans mon message pour voir si cela changeait quelque chose.

IP archivée


Merlin  23 mai 2020 : 12:53

 :bonjour:

IP archivée