Handling events
This topic shows how to handle client-side epiforms events in Alloy MVC templates with JavaScript.
Note
Optimizely Forms is only supported by MVC-based websites and HTML5-compliant browsers.
Query client-side events
The following JavaScript code shows how to handle client-side epiforms events in Alloy MVC templates.
if (typeof $$epiforms !== 'undefined')
{
$$epiforms(document).ready(function myfunction()
{
console.log('listen to event');
$$epiforms(".EPiServerForms").on("formsNavigationNextStep
formsNavigationPrevStep
formsSetupCompleted
formsReset
formsStartSubmitting
formsSubmitted
formsSubmittedError
formsNavigateToStep
formsStepValidating",
function (event, param1, param2)
{
console.log($$epiforms(this).get(0), event);
});
});
}
For a QuickSilver site, put the following script before @Html.RequiredClientResources("Footer").
if (typeof $$epiforms !== 'undefined')
{
console.log('listen to event');
$$epiforms(".EPiServerForms").on("formsLoadExternalScripts formsLoadExternalCss", function (event, param1, param2)
{
console.log($$epiforms(this).get(0), event);
});
}
The following jQuery event objects are notification-only:
- type. Type of event.
- working form DOM element. The DOM element raises the event.
- workingFormInfo. Contains meta-information of current Optimizely Forms.
- formData. In some submitting-related events, this property contains the standard FormData object of the submission.
Note
The form event handling script must be placed below the @Html.RequiredClientResources("Header"). For example:
<head>
@Html.RequiredClientResources("Header")
@Scripts.Render("/ClientResources/Scripts/FormEventHandling.js")
</head>
Note
If event handling script is rendered using EPiServer.Framework.Web.Resources.IRequiredClientResourceList, then it must depend on EPiServer.Forms.ConstantsForms.StaticResource.JS.FormsjQuery and EPiServer.Forms.ConstantsForms.StaticResource.JS.EPiServerFormsPrerequisite. For example:
var requiredResources = ServiceLocator.Current.GetInstance<IRequiredClientResourceList>();
requiredResources.RequireScript("/ClientResources/Scripts/FormEventHandling.js", "", new List<string>{
ConstantsForms.StaticResource.JS.FormsjQuery,
ConstantsForms.StaticResource.JS.EPiServerFormsPrerequisite
}).AtHeader();
.NET events
Form submissions (and form step submissions) must result in events.
- FormsStructureChange
- FormsStepSubmitted
- FormsSubmissionFinalized
- FormsSubmitting
The following example code catches server-side events in InitializationModule:
// get the Forms Event Manager to listen to its events
var formsEvents = ServiceLocator.Current.GetInstance<FormsEvents>();
formsEvents.FormsStructureChange += OnStructureChange;
formsEvents.FormsSubmitting += OnSubmitting1;
formsEvents.FormsSubmitting += OnSubmitting2;
formsEvents.FormsStepSubmitted += OnStepSubmit;
formsEvents.FormsSubmissionFinalized += OnFormFinalized;
With FormsSubmitting, FormsStepSubmitted, and FormsSubmissionFinalized events, you can cast the eventArgs to FormsSubmittingEventArgs, where you can get information from SubmissionData (having SubmissionData.Data as IDictionary<string, object>) and the FormSubmissionId.
List of events
- formsNavigationNextStep
- formsNavigationPrevStep
- formsSetupCompleted
- formsReset
- formsStartSubmitting
- formsSubmitted
- formsSubmittedError
- formsNavigateToStep
- formsStepValidating
- FormsStructureChange
- FormsStepSubmitted
- FormsSubmissionFinalized
- FormsSubmitting
Updated 4 months ago