Copy link to clipboard
Copied
I am a complete beginner.
This is a very rudimentary question.
I am creating a slightly spreadsheet-like form.
Objectize each field as follows.
Intuitively, A, B and C are vertical columns.
Think of 12345 as a row.
var A1 = this.getField("A_1");
var A2 = this.getField("A_2");
var A3 = this.getField("A_3");
var A4 = this.getField("A_4");
var A5 = this.getField("A_5");
var B1 = this.getField("B_1");
var B2 = this.getField("B_2");
var B3 = this.getField("B_3");
var B4 = this.getField("B_4");
var B5 = this.getField("B_5");
var C1 = this.getField("C_1");
var C2 = this.getField("C_2");
var C3 = this.getField("C_3");
var C4 = this.getField("C_4");
var C5 = this.getField("C_5");
I am trying to copy the value entered in the specified C field to B based on the value entered in A.
Each row has a button, and the following JavaScript is embedded in the button.
Very simple code.
if(A1.value == 3000){B1.value = C1.value;}
if(A1.value == 6000){B1.value = C2.value;}
if(A1.value == 12000){B1.value = C3.value;}
if(A1.value == 24000){B1.value = C4.value;}
if(A1.value == 36000){B1.value = C5.value;};
The problem is that I have to place this code on a button on every line.
The second line looks like this.
if(A2.value == 3000){B2.value = C1.value;}
if(A2.value == 6000){B2.value = C2.value;}
if(A2.value == 12000){B2.value = C3.value;}
if(A2.value == 24000){B2.value = C4.value;}
if(A2.value == 36000){B2.value = C5.value;};
The third line looks like this.
if(A3.value == 3000){B3.value = C1.value;}
if(A3.value == 6000){B3.value = C2.value;}
if(A3.value == 12000){B3.value = C3.value;}
if(A3.value == 24000){B3.value = C4.value;}
if(A3.value == 36000){B3.value = C5.value;};
This is very time consuming when writing code...
I want to make about 300 buttons like this.
In the above example, the numbers must be rewritten 10 times per line.
I want to do this with one rewrite.
Isn't it possible to assign the number of the object name indicating the line in any way?
I tried various things, but none worked well.
Thanks for your guidance.
Don't use a fix value for i. You can ectract the value from the name of the button.
Copy link to clipboard
Copied
What names does you use for the buttons?
Copy link to clipboard
Copied
Thanks for the reply.
The button field names are as follows...
"MB_1"
"MB_2"
"MB_3"
"MB_4"
"MB_5"
Copy link to clipboard
Copied
At the button you will get the row number with:
Number(event.target.name.substring(3))
You can use this in a document level function. At every button use this function.
Copy link to clipboard
Copied
This code can be used to replace all the code you have, and if you want to apply it to 300 fields instead of 5 just change the value of maxFields in line #2:
var values = [0, 3000, 6000, 12000, 24000, 36000];
var maxFields = 5;
for (var i=1; i<=maxFields; i++) {
var A = this.getField("A"+i);
var B = this.getField("B"+i);
var idx = values.indexOf(Number(A.valueAsString));
// in case of no-match or if the A field is empty reset B
if (idx<=0) B.value = "";
// in case of a match copy the value of the relevant C field to B
else B.value = this.getField("C"+idx).value;
}
Copy link to clipboard
Copied
Thank you for your guidance.
I am very happy.
I think the code you gave is very close to what I want.
But, unfortunately, there is a slight misunderstanding.
Maybe I didn't have enough words in the text of my first question.
I am Japanese and not good at English. Sorry..
===
I want to make it easier to write code in each button in a form.
Because I needs to create nearly 300 buttons.
â‘ These five lines of code are described in one button field.
A1 and B1 remain the same in all five lines.
if (A1.value == 3000) {B1.value = C1.value;}
if (A1.value == 6000) {B1.value = C2.value;}
if (A1.value == 12000) {B1.value = C3.value;}
if (A1.value == 24000) {B1.value = C4.value;}
if (A1.value == 36000) {B1.value = C5.value;};
â‘¡ Every row in a form that is structured like a spreadsheet has a button for each.
The above code is the button on the first row when the whole form is viewed like a spreadsheet.
And the above code is written on that 1st button. (Row 1)
â‘¢There are 300 row, so there are 300 buttons.
â‘¢Basically, when I make new button, copy and paste code.
Then rewrite only the necessary parts.
The code for the second button on the second row must change.
A1 becomes to A2.
B1 becomes to B2.
The button on the 300th row will be A300 and B300.
â‘£As it is, I must write the number next of A five times for each button until the button on the 300th row is created. And also 5 five times next to B.
In the 300th button
if (A300.value == 3000) {B300.value = C1.value;}
if (A300.value == 6000) {B300.value = C2.value;}
if (A300.value == 12000) {B300.value = C3.value;}
if (A300.value == 24000) {B300.value = C4.value;}
if (A300.value == 36000) {B300.value = C5.value;};
⑤ In other words, I have to 300 times rewrite the numbers next to A and B in the five lines of code.
I want to make this job to easier.
For example, I wrote the following code.
var i = 300
if (("A" + "i"). value == 3000) {("B" + "i"). value = C1.value;}
if (("A" + "i"). value == 6000) {("B" + "i"). value = C2.value;}
if (("A" + "i"). value == 12000) {("B" + "i"). value = C3.value;}
if (("A" + "i"). value == 24000) {("B" + "i"). value = C4.value;}
if (("A" + "i"). value == 36000) {("B" + "i"). value = C5.value;};
In this case, changes in each button can be made in only one place, greatly simplifying the work.
But this code doesn't work.
I want you to teach me how to write this correctly.
Thankyou and Best Regards.
Copy link to clipboard
Copied
By the way, the following may be unnecessary information.
The value of assigned to C1, C2, C3, C4, C5 are changed before use this button.
Under different code of different field of each row .
Copy link to clipboard
Copied
Use
this.getField ("A_" + i).value
and
this.getField ("B_" + i).value
Copy link to clipboard
Copied
To Mr. or Ms. Bernd_Alheit.
And also Mr. or Ms. try67.
Thankyou !!!
God bless to you !!!
I am really stupid.
I did not understand how to use <i> basically.
I succeeded by writing the code below!
var i = 2
var Aa = this.getField("A_" + i);
var Bb = this.getField("B_" + i);
if (Aa.value == 3000) {Ba.value = C1.value;}
if (Aa.value == 6000) {Ba.value = C2.value;}
if (Aa.value == 12000) {Ba.value = C3.value;}
if (Aa.value == 24000) {Ba.value = C4.value;}
if (Aa.value == 36000) {Ba.value = C5.value;};
In any case, thank you very much!
You are my savior!
Copy link to clipboard
Copied
Don't use a fix value for i. You can ectract the value from the name of the button.
Copy link to clipboard
Copied
Mr.Bernd_Alheit.
Thank You for your kindness adding suggestion.
I understand your suggestion.
I should use a syntax of "for ".
I must to learn each of each and make it my own knowledge.
I'll do my best.
Please do not hesitate to give me advice in the next question.
Thank you.