RSForm callback functies

RSForm!Pro is een populaire component voor joomla. Je voegt ermee eenvoudig formulieren toe aan je joomla website. De mogelijkheden zijn uitgebreid, maar soms loop je tegen zaken aan die niet met de standaard functionaliteit op te lossen is.

Voor een website moesten er nog wat, javascript, acties uitgevoerd worden. Dit moest gebeuren nadat de velden van het formulier succesvol gevalideerd waren, maar voor het versturen van het formulier.

Bij normale formulieren is een mogelijk oplossing om een event listeren op de submit van het formulier te zetten. In basis:

document.getElementById('form').addEventListener('submit', logSubmit);

Helaas doet RSorm voor de, ajax, validatie iets met de knoppen van het formulier. Hierdoor werkt bovenstaande niet. (zitten nog wat meer haken en ogen aan bovenstaande oplossing, maar die laten we even).

Hoe mooi zou het zijn als het mogelijk was een functie aan te roepen bij een succesvolle validatie. Op de site van RSForm is daar bitter weinig over te vinden. Een, onbeantwoorde, forumvraag. Maar daar staat wel in essentie de oplossing.

In de code van rsform staan een aantal aanroepen van callbacks:

  • changePage
  • afterValidationFailed
  • nextPageFailed
  • afterValidationSuccess
  • nextPageSuccess

En met afterValidationSuccess hebben we dan de mogelijkheid om na een successvole validatie, en voor de submit, een functie aan te roepen.

Een callback voeg je toe met een stukje code:

function  logSubmit (args) {
        console.log('Form OK');
}
RSFormPro.callbacks.addCallback(7,'afterValidationSuccess',[logSubmit]);

De eerste parameter, de 7 in dit voorbeeld, is de Form ID van het formulier. Dat zie je terug in de editor van joomla. Het is dus niet de html id (#userform, userform) van je formulier. Hier gaat de vragensteller de fout in. Tweede fout die hij maakt, is dat je de functie niet als string moet meegeven, dus geen quotes eromheen. Het is niet de naam van de functie, maar de functie zelf die je als parameter meegeeft. Behalve de functie kun je nog meer argumenten meegeven.

function  logSubmit (args) {
        console.log(args[0]);
}
RSFormPro.callbacks.addCallback(7,'afterValidationSuccess',[logSubmit,'string']);

Het toevoegen van de javascript kan eenvoudig via het script veld bij de Form Properties.

De callback heeft geen invloed op het wel of niet versturen van het formulier.

Plaats een reactie