Advanced JavaScript in Forms ("Fancy Stuff")

Inline Functions

Sometimes, you want a formula or "show if" expression to do really fancy stuff. Perhaps you want to do an "if/then/else" type of expression to decide whether a section of questions resolves to level 1 or level 2. It could be a lot more complicated than that (see the probability of readmission score for an example).

You will find that adding a simple if (x) { return y; } won't work. For example, the following will not work:

(ScriptUtil.sum(mySection) > 5) return 2; else return 1;

The trick is that you need to define and execute a function inline, like this:

function() { if (ScriptUtil.sum(mySection) > 5) return 2; else return 1; }() 
Copy Rule

Technical details

To break this down, this part defines the function:

function() { if (ScriptUtil.sum(mySection) > 5) return 2; else return 1;}

The "()" at the end simply runs the newly defined function.

Date Manipulations

You can create a new Date in Javascript using the "new Date()" call, which returns the current date/time instant. You can use "new Date(2020,2,10)" to create a date for March 10, 2020 (yes, March; the month is confusingly 0-indexed, so January is month 0).

You can call (new Date().getMonth()) to get the current month (0-indexed again, so March == 2).

To compare dates, simply subtract them to obtain the number of milliseconds in between, then divide that difference by (1000*60*60*24) to get the difference in days.

Google "Javascript date reference" for more information.

Advanced Javascript

As long your script evaluates to a single expression, you can do pretty much anything that you can do with Javascript. Some advanced scripting functionality uses an inline function as described above to have a complicated multi-line algorithm wrapped in a single expression.

You can learn more about Javascript using Google (e.g. "how do I compare dates in Javascript?") or by reading a good reference book (e.g. "Javascript: The Good Parts").

Have more questions? Submit a request