Transformer un script "absolu" en script "relatif"  (Lu 1067 fois) Partager ce sujet Imprimer

1 B


PhDCus  19 février 2019 : 11:26

Bonjour à tous,
je cherche à transformer un script "absolu" en script "relatif" (je ne suis pas sûr des termes employés).Je m'explique. J'ai des champs interdépendants. Ces champs sont dupliqués 10 fois et aujourd'hui j'ai un script pour chaque groupe de champs. Ce script est le même pour tous, il y a juste le n° des champs qui changent.
Quand je dois modifier le script, je dois le faire 10 fois...
Je voudrais savoir s'il est possible, au déclenchement du script, que ce dernier détecte le n° du champ et modifie en conséquence uniquement les champs du même groupe.J'espère que je suis assez claire et précis, mais j'ai un doute sur ce point...
Voici le script. J'utilise Adobe pro DC.
Merci pour votre aide !


if (this.getField("CreditTypeAutreCredit_0").value == "----------------------") {this.getField("ChargeTypeNomCredit_0").value = ""} else {this.getField("ChargeTypeNomCredit_0").value = "Autres"}

this.getField("nature_credit_1").value = this.getField("CreditTypeAutreCredit_0").value

this.getField("capital_emprunte_credit_1").value = this.getField("ChargeMontantCredit_0").value

this.getField("taux_interet_credit_1").value = this.getField("TauxCreditCredit_0").value

if (this.getField("ChargeDateDebutJourCredit_0").value == "")
{this.getField("date_souscription_credit_1").value = ""}
else
{this.getField("date_souscription_credit_1").value = this.getField("ChargeDateDebutJourCredit_0").value + "/" + this.getField("ChargeDateDebutMoisCredit_0").value + "/" + this.getField("ChargeDateDebutAnneeCredit_0").value }


IP archivée


bebarth  19 février 2019 : 11:59

bonjour,
Il faut que tu  récupères "l'indice" de ton champ avec :
var str = this.event.target.name;
var n = str.indexOf("_");
indice = parseInt(str.substring(n+1));
Ici, "indice" représente la valeur numérique de tous les caractères situés après "_" dans le nom du champ.
Si ton champ se nome "reditTypeAutreCredit_0" indice vaut 0, et tu pourras écrire :
this.getField("nature_credit_"+(indice+1)).value = this.getField("CreditTypeAutreCredit_"+indice).value;
au lieu de
this.getField("nature_credit_1").value = this.getField("CreditTypeAutreCredit_0").value;
etc.
...si j'ai bien compris ce que tu veux faire.
Et quand on commence à avoir x fois le même script pour le même calcul il est préférable de le mettre en fonction dans un script de document. On ne l'écrit qu'une seule fois et s'il y a une modification, on ne la fait qu'une fois.
Il existe plusieurs exemples sur le forum, dont celui-ci :
https://abracadabrapdf.net/forum/index.php/topic,3594.0.html
@+
 :bonjour:

IP archivée


PhDCus  19 février 2019 : 12:25

Merci pour le retour ! Je vais mettre en place !

IP archivée


Merlin  19 février 2019 : 13:07

Bonjour.

Autre astuce : quand le script est placé dans le champ qui l'exécute il n'y a pas besoin de le nommer, on peut remplacer le nom du champ par event.target (le champ cible de l'évènement).

Par exemple, si le script de calcul est placé dans le champ "date_souscription_credit_1", on peut remplacer :

this.getField("date_souscription_credit_1").value = this.getField("ChargeDateDebutJourCredit_0").value + "/" + this.getField("ChargeDateDebutMoisCredit_0").value + "/" + this.getField("ChargeDateDebutAnneeCredit_0").value;

par

event.target.value = this.getField("ChargeDateDebutJourCredit_0").value + "/" + this.getField("ChargeDateDebutMoisCredit_0").value + "/" + this.getField("ChargeDateDebutAnneeCredit_0").value;

Ça marche aussi dans les fonctions.
 :Smiley15:

IP archivée


PhDCus  19 février 2019 : 14:47

Merci Merlin pour l'astuce. Je vais gagné du temps.
Le script marche nickel, mais j'ai une nouvelle difficulté... J'ai des champs qui n'ont pas de séparateur "_". J'ai tenté çà dans le champ EnfantNomEnfant0

Citer
var str = this.event.target.name;
var n = str.indexOf("mEnfant");
indice = parseInt(str.substring(n+1));

this.getField("nom_personne_"+(indice+1)).value = this.getField("EnfantNomEnfant"+indice).value
mais ça ne marche pas

IP archivée


bebarth  19 février 2019 : 15:22

...normal que ça ne marche pas, ici il faut écrire :
indice = parseInt(str.substring(n+7));str.substring donne la position du premier caractère (n), et +1 pour le caractère suivant.
Pour "mEnfant" il faut rajouter 7 caractères.
@+
 :bonjour:

IP archivée


PhDCus  19 février 2019 : 17:17

Nickel ! je n'étais pas près de trouver...Merci encore !

IP archivée


PhDCus  10 décembre 2020 : 14:48

De retour sur ce sujet...Cette fois, mon indice est compris dans le nom du champ :
P5.AV2.frais_€.0 où l'indice est 5 uniquement
C'est possible d'aller incrémenter le 5 ?

IP archivée


bebarth  10 décembre 2020 : 15:13

bonjour,
Si le nombre est toujours situé entre le P (première lettre) et le premier point, il suffit de rechercher la position de ce premier point qui peut varier en fonction du nombre de chiffres après le "P". Donc :
var ancien="P5.AV2.frais_€.0";
var positionPoint=ancien.indexOf("."); // position du premier point
var nouveau=ancien.substring(0,1)+(Number(ancien.substring(1,positionPoint))+1)+ancien.substring(positionPoint);
cf. https://www.w3schools.com/jsref/jsref_indexof.asp et https://www.w3schools.com/jsref/jsref_substring.asp
Je développerai si tu ne comprends pas... mais je doute si tu es PhD !
@+
 :bonjour:

IP archivée


PhDCus  10 décembre 2020 : 16:35

lol Merci ! Je vais regarder çà :D

IP archivée