How to create a conditional multi-page form
In the following article we will present an example on how to build a multi-page form that displays a different page based on the user's selection.
Download Sample Formrsfp_changePage function
Before we get started you should first familiarize yourself with the default function used by the RSForm!Pro component to change pages: rsfp_changePage()(you can find the function in media/com_rsform/js/script.js). This function offers 4 parameters:
- formId: this parameter stores the id of the form you are using
- page : this parameter stores the page that you will move to
- totalPages: this parameter stores that total number of pages your form contains(please note that the page count starts from 0)
- validate: this parameter returns either true or false, based if you want the data entered in the fields to be validated before the page is changed
Extending its functionality
Since the function does not offer the conditional feature by default, you will need to create a custom function that will first check the user's input and then trigger the default rsfp_changePage() function with different parameters so that the conditional functionality is generated.
In our example we have used a simple 4 pages form and used a radio group(named 'skip') on the first page that will determine if the second page of the form will be shown.
Example
The custom function that controls the change page functionality should be set in the CSS & Javascript tab and should be similar to:
<script type="text/javascript"> function rsfp_conditionalPage(formId, page, totalPages, validate){ //the following if clause will address the change page functionality when the "Next" button is used if(page == 1 && document.getElementById('skip0').checked && typeof validate != 'undefined'){ /* this will check if the user tries to change the page to the conditional page(the second page),if the user selected to skip this page and if a "Next" button was used*/ rsfp_changePage(formId, page+1, totalPages, validate); /* this will trigger the default change page function while incrementing the page parameter one more time so that the form moves to the third page directly*/ return ''; // this is used so that after the function is triggered the script is stopped } //the following if clause will address the change page functionality when the "Previous" button is used if(page == 1 && document.getElementById('skip0').checked && typeof validate == 'undefined'){ /* this will check if the user tries to return to the conditional page(the second page),if the user selected to skip this page and if a "Previous" button was used*/ rsfp_changePage(formId, page-1, totalPages, validate); /* this will trigger the default change page function while decrementing the page parameter so that the form moves to the first page directly*/ return ''; // this is used so that after the function is triggered the script is stopped } rsfp_changePage(formId, page, totalPages, validate); // this is used so that the multi-page display is properly shown when the form is first loaded } </script>
In order to replace the default change page function with your custom one you will require an additional script in the Scripts called on form display field of the PHP Scripts tab:
$formLayout = str_replace('rsfp_changePage(', 'rsfp_conditionalPage(', $formLayout);
10 persons found this article helpful.
You Should Also Read
Conditional fields are not working |
Conditional fields feature first-hand example |