Skip to main content
Nintex Community Menu Bar

This should be a simple enough function but I can't find any simple solution to it, so hope an expert can help.

Within a repeating section I have 2 fields of interest: "R_Days", a multichoice checkbox 1-31 for days of month, and "R_Full", a yes/no checkbox.  What I need to do is if R_Full is checked then set R_Days to all values (the whole month), and correspondingly, if R_Full is changed to unchecked then reset the value of R_Days back to "", effectively blanking out the days.  

I started down the NWF$() reference path within the main form area but immediately hit the "this cannot be done within a repeating section" message.

Any advice most appreciated.

I believe this should do the trick. 

 

Here is a test form containing only a Repeating Section in which a Yes / No ("R_Full") Control, and a Choice Control ("R_Days") have been placed:

 

Before we get started with the bulk of it. Let's make a Global Variable we're going to use later. Go to the Form Settings:

 

Then expand the Custom Javascript dropdown: 

 

Inside of the textarea, copy and paste the following code: 

/* We need to make a global variable that will store a value which can tell us if our form is ready. It's initialized as false because when it's created, the form isn't ready. */ var NCU = {FormVariables: {pageIsReady: false}}; /* Now we need to setup something to change the value once the form *is* ready. */ NWF.FormFiller.Events.RegisterAfterReady(function () { NCU.FormVariables.pageIsReady = true; });

(NOTE: if you already have custom code in there, just add this to the top or bottom!)

 

All this does, as it is explained in the code, is give us a way to know if the form has been initialized and is ready. This is useful to us because we will be using a formatting rule to initiate the handling of checking / unchecking all of the R_Days boxes, and rules will typically run when the form is being created, which would be bad because that means our R_Days could be checked or unchecked before we even had a chance to touch the R_Full control (meaning we could lose data if some was already there!). 

 

With that out of the way, save your Form Settings, and then select Rules from the Navigation Ribbon:

 

With the Rule Panel open, select the R_Full control inside of the Repeater Section, and create a Formatting Rule:

 

After you have named it, and made sure it's on Formatting, click on the little Formula Builder button to open the Formula Builder dialog

 

Copy and Paste the code below:

(function(formControlCall, daysControlName) { if (NCU.FormVariables.pageIsReady !== true) { return false; } var formControlID = formControlCall.split("'")[1] || ""; var targetControl = sourceContext.find("[formcontrolid='" + formControlID + "'].nf-filler-control"); var isChecked = targetControl.find("[formcontrolid][id]").prop("checked"); var daysControl = targetControl.siblings("[data-controlname='" + daysControlName + "']"); var days = daysControl.find("input[type='checkbox']"); days.each(function(index, day){ NWF$(day).prop("checked", isChecked); }); return false; }("{Control:Self}", "R_Days"))


Here is the same code as above, but with comments added so that you can see what each thing does:

(function(formControlCall, daysControlName) { /* This uses our previously created global variable to return early in the event that this has been invoked before the form is ready */ if (NCU.FormVariables.pageIsReady !== true) { return false; } /* Using the formControlCall string, we can split out the formcontrolid value from it */ var formControlID = formControlCall.split("'")[1] || ""; /* Using that value we can then target the control in question */ var targetControl = sourceContext.find("[formcontrolid='" + formControlID + "'].nf-filler-control"); /* Now that we have our targetControl, we can figure out if it's checked or not */ var isChecked = targetControl.find("[formcontrolid][id]").prop("checked"); /* Now we grab a reference to the sibling "R_Days" control in the same Repeater Row */ var daysControl = targetControl.siblings("[data-controlname='" + daysControlName + "']"); /* Lastly we get a reference to all of the Days contained therein */ var days = daysControl.find("input[type='checkbox']"); /* With a simple loop, we set the value of each day to that of the R_Full checkbox */ days.each(function(index, day){ NWF$(day).prop("checked", isChecked); }); return false; }("{Control:Self}", "R_Days"))

 

Once the code has been added, click on OK:

 

Save your form, and test it out!

 

Starting:

 

Checked: 

 

Unchecked:

 

I hope that this helps to solve your problem!

 


Many thanks for such a well-written solution - works perfectly!