Can you reset the elements of a subform? Just a subform! Just like when it was first loaded? If so, how?
Subform contents are Textfields, DropDowns, DateFields, RadioButtons, etc?
Thanks in advance.
Views
Replies
Total Likes
The resetData method allows you to pass a string representing a list of fields separated by commas (in the form of a SomExpression). You can try a subform and see if the child nodes get reset as I am not sure if it will only accept a field.
Paul
Views
Replies
Total Likes
Similar to Paul's suggestion, I built a script to build a string containing all the names of the objects in a subform node of className 'field'. The string of field names is then passed to xfa.host.resetData().
Since the fields have to be comma-delimited, I concatenate the subform name, the field name, and a comma into a string called 'fieldStr'. The value of 'fieldStr' is then concatenated to a variable called 'fieldNames'. When I am done iterating over the subform node I then strip the last comma from the 'fieldName' string.
// form1.page1.subform1.resetBtn::click - (JavaScript, client)
var fieldNames = "";
for (var i=0; i < subform1.nodes.length; i++) {
if (subform1.nodes.item(i).className == "field") {
var fieldStr = "subform1." + subform1.nodes.item(i).name + ",";
fieldNames = fieldNames + fieldStr;
}
}
fieldNames = fieldNames.substring(0,fieldNames.length - 1);
xfa.host.resetData(fieldNames);
Views
Replies
Total Likes
Hi Steve, I was just playing with your script as I have a similar problem in needing to reset fields in a subform, but when I try it it resets all data no matter what subform it's in.
I took your supplied sample and added another subform (not inside the existing subform) and it gets reset as well.
I've tried passing the fields as full strings for resetData("...") in a form I'm working on as well and seem to get the same results.
Any idea what's going on?
Views
Replies
Total Likes
No. My script is definitely not much good.
1) I just realized radio button lists do not expose their 'name' attribute in 'field' so the script will never find radio buttons
2) I cannot get resetData() to recognize any programmiatic construction of a string of field names
On the other hand, when you build the resetData() as
xfa.host.resetData("form1.page1.subform1.TextField1,form1.page1.subform1.RadioButtonList");
it behaves a advertised.
Views
Replies
Total Likes
The resetData is expecting a string that represents the object name. Are you passing in th entire object or the string of the name. You could use resetData(object.name)
Paul
Views
Replies
Total Likes
Yeah, actually I've found there's a couple of different ways to pass the fields in...It doesn't need the full path, it just has to know where the field is.
xfa.host.resetData("form1.sMain.SubRegularSurplus.SubPositioned.Vote");
xfa.host.resetData("Vote");
It will reset the data in subforms:
xfa.host.resetData("form1.sMain.SubRegularSurplus.SubPositioned");
xfa.host.resetData(SubPositioned.somExpression);
Some of the weirdness I was getting was that it ws also resetting the visibility of the subform - Think I've got it figured out now. It behaves differently with subforms depending on the expression used.
If I use xfa.host.resetData("SubPositioned"); it resets everything on the form (needs the full path). If I use xfa.host.resetData("form1.sMain.SubRegularSurplus.SubPositioned"); it works ok. And if I use xfa.host.resetData(SubPositioned.somExpression); it works ok.
I found the "somExpression" version in a sample somewhere - not sure how it works...
Quite an old discussion this but thought I'd share my findings.
By re-using the lock fields script provided by pguerret, I've been able to reset data in particulare subforms as follows:
Call to the script object -
clearData.resetAllData(xfa.resolveNode("form1.subform1.subformIWantToReset"));
Then my script object looks like this:
function
resetAllData(myParentObject)
{
var allChildElements;
var intNumElements;
var currentElement;
var j;
var temp;
// get all the child nodes of the parent element
allChildElements
= myParentObject.nodes;
// total number of element in the object
intNumElements
= allChildElements.length;
// loop through all the child elements
for(j=0; j<intNumElements; j++)
{
currentElement
= allChildElements.item(j);
// if the element is another subform we'll recusively call the function again
if(allChildElements.item(j).className == "subform")
{resetAllData(currentElement);}
// if the objects are fields
else if(currentElement.className == "field")
{
temp = currentElement.name;
if ((temp.substring(0,3) != "btn"))
{xfa.host.resetData(currentElement.somExpression);}
}
}
}
My initial testing seems to suggest this has worked.
Views
Replies
Total Likes