Expand my Community achievements bar.

SOLVED

How do I set focus after initialization?

Avatar

Level 7

Problem: I'm having trouble setting the focus to a new text field after it is initialized.

Background: I have created a form with a table that creates a new row after leaving the last textfield/cell in the last row if it is needed. Once I tab out of the last field, focus is lost completely--i.e., tabbing does not reach any other parts of the form.

Attempts: I have attempted to set focus on the first text field in the new row by using (rowNum is a variable for the newly created row)

xfa.host.setFocus("xfa[0].form[0].form1[0].#subform[0].Subform2[0].Table1[0].Row1[rowNum].TextField1[0]");

and

this.parent.parent.Row1[rowNum].TextField1.setFocus();

I have also tried to set focus back to the last field I had just exited with

xfa.host.setFocus("this");

I have also tried using the action builder to bring focus to the newly created textfield when it is initialized.

[edit] I forgot to say that the attempt to set the focus back to the last field I had just exited actually worked. [/edit]

Message was edited by: jasotastic81

1 Accepted Solution

Avatar

Correct answer by
Level 4

Looks like you used the variable as a literal string... you need to concatenate the value of the variable into the SOM expression:

xfa.host.setFocus("xfa[0].form[0].form1[0].#subform[0].Subform2[0].Tab le1[0].Row1[" + rowNum + "].TextField1[0]");

Note the two + around the variable name, to join it's value with the rest of the string.

Let us know if this helps.

-Scott

View solution in original post

3 Replies

Avatar

Correct answer by
Level 4

Looks like you used the variable as a literal string... you need to concatenate the value of the variable into the SOM expression:

xfa.host.setFocus("xfa[0].form[0].form1[0].#subform[0].Subform2[0].Tab le1[0].Row1[" + rowNum + "].TextField1[0]");

Note the two + around the variable name, to join it's value with the rest of the string.

Let us know if this helps.

-Scott

Avatar

Level 7

@past-tense

It didn't fix it exactly, but it did put me on the right track. I think I may have changed some of the containers after posting my question while working on other parts of the form.

Here was my solution:

var s = "this.parent.parent.Row1["+rowNum+"].TextField1";

xfa.host.setFocus(s);

I had not even considered that I was using a literal string, despite the quotation marks...

Avatar

Level 4

Hey again, glad you worked it out.

Just for clarification, a literal string is anything between quotes. Literal strings are just plain text. Including the name of the variable in the string does not actually cause a reference to the value to exist. The compiler just sees text, and doesn't know which (if any) parts of the text you intended to reference a variable.

So when you wrote:

xfa.host.setFocus("xfa[0].form[0].form1[0].#subform[0].Subform2[0].Table1[0].Row1[rowNum].TextField1[0]");

if was almost like trying to reference a field directly by using:

xfa.form.form1.subform.subform2.table1.Row1["rowNum"].TextField1

"rowNum" is just a string, one that 'just so happens' to have the name of your variable in it. The compiler has no clue what to do with a string as an index, so it fails.

Hope that helped to explain it a bit better.