Formulieren bouwen
Conditionele logica
Logicablokken reageren op wat een respondent invoert — toon of verberg elk blok, spring naar pagina’s, blokkeer verzending of bereken waarden. Combineer eenvoudige regels tot geavanceerde vertakking zonder code.
Wat logica kan doen
Elk logicablok heeft een of meer regels. Elke regel koppelt een conditiegroep (wanneer moet dit activeren?) aan een of meer acties (wat moet er gebeuren?). Er zijn negen actietypen beschikbaar:
| Actie | Wat het doet |
|---|---|
| Toon | Maak een verborgen blok — een vraag, alinea, afbeelding of optie — zichtbaar wanneer condities overeenkomen. |
| Verberg | Verberg een zichtbaar blok — een vraag, alinea, afbeelding of optie — wanneer condities overeenkomen. |
| Maak verplicht | Maak een veld dynamisch verplicht voor bepaalde paden. |
| Maak optioneel | Versoepel de validatie van een verplicht veld wanneer condities overeenkomen. |
| Stel volgende pagina in | Sla over naar een specifieke pagina — zo bouw je vertakking |
| Bereken waarde | Bereken totalen, scores of prijzen op basis van andere antwoorden. |
| Stel betalingsbedrag in | Stel de prijs van een Payment-veld in, of verhoog of verlaag deze op basis van antwoorden. |
| Voorkom navigatie naar volgende pagina | Verhinder dat de respondent verder gaat, met een optioneel bericht dat uitlegt waarom. |
| Voorkom verzending van formulier | Verhinder verzending totdat aan condities is voldaan (bijv. voorwaarden geaccepteerd), met een optioneel bericht dat uitlegt waarom. |
Een logicablok toevoegen
Een logicablok is een documentelement — het staat op het canvas tussen vragen, net als een kop of een afbeelding. Je kunt het overal plaatsen: tussen twee velden op dezelfde pagina, bovenaan een pagina of vlak voor een pagina-einde.
- 1
Open het schuinstreepjesmenu
Klik op een lege regel op het canvas en typ /. De blokkenkeuzelijst verschijnt.
- 2
Zoek naar "Logic"
Typ logic om te filteren. Kies Logic uit de categorie Lay-out. Er verschijnt een nieuw logicablok bij de cursor.
- 3
Voeg een regel toe
Het blok toont Wanneer … Doe …. Elke regel heeft één conditiegroep en een of meer acties.
- 4
Definieer condities
Kies een veld, kies een operator en stel een waarde in. Voeg nog een conditie toe, of voeg een set voorwaarden toe om één niveau dieper te nesten.
- 5
Kies acties
Kies een actietype (Toon, Verberg, Maak verplicht, Stel volgende pagina in, enz.) en kies het doel — een vraag, een blok, een optie of een pagina.
- 6
Voeg meer regels toe (optioneel)
Een enkel logicablok kan meerdere regels bevatten. Elke regel is onafhankelijk: eigen condities, eigen acties.
Condities
Condities zijn de kant Wanneer van een regel. Elke conditie kiest een veld, past een operator toe en vergelijkt vaak met een waarde. De veldkiezer groepeert wat je kunt observeren: Vragen, Verborgen velden, Berekende velden en Metadata (op dit moment de taal van de respondent).
Alle of Elk
Zodra een regel twee of meer condities heeft, verschijnt er een schakelaar boven aan de sectie Wanneer:
Alle — elke conditie moet waar zijn voordat de regel activeert. De rijen lezen als “en”.
Elk — één ware conditie is genoeg. De rijen lezen als “of”.
Sets van condities
Voeg een set voorwaarden toe nest een tweede groep binnen de eerste, één niveau diep, met zijn eigen Alle/Elk-schakelaar. Dat dekt samengestelde logica zoals “abonnement is Pro en (land is Noorwegen of land is Zweden)”. Een set bevat alleen condities — hij kan geen andere set bevatten.
Een verborgen vraag heeft geen waarde
Als logica een vraag verbergt, telt het antwoord dat de vraag mogelijk al had nergens meer mee — niet in condities, niet in berekeningen, niet in het betalingsbedrag en niet in de opgeslagen inzending. Het antwoord komt alleen terug als de vraag weer zichtbaar wordt. Hetzelfde geldt voor elke vraag in een verborgen rij, kolom of herhalende groep, en voor een gekozen optie die logica verbergt. Een pagina die de regels Stel volgende pagina in overslaan, telt ook als verborgen: de vragen erop zijn niet verplicht en wat daar is beantwoord, vervalt. Verborgen velden zijn het tegenovergestelde: die dragen altijd hun waarde.
Houd het leesbaar
Als een enkel logicablok te complex aanvoelt, overweeg dan de logica te verdelen over meerdere logicablokken of de pagina’s van je formulier opnieuw in te delen.
Operatorenoverzicht
De lijst met operators wordt bepaald door het veld dat je hebt gekozen — je ziet altijd alleen de operators die dat veld ondersteunt. Hieronder benoemt elke kop de exacte set.
Tekst (Tekstinvoer, Tekstgebied en tekst-berekende velden)
| Operator | Omschrijving |
|---|---|
| is | Waarde komt overeen, ongeacht hoofdletters en spaties aan het begin of eind |
| is not | Waarde komt niet overeen |
| contains | Waarde bevat de opgegeven tekst |
| does not contain | Waarde bevat de opgegeven tekst niet |
| starts with | Waarde begint met de opgegeven tekst |
| ends with | Waarde eindigt met de opgegeven tekst |
| is empty | Veld heeft geen waarde |
| is not empty | Veld heeft een waarde |
Elke tekstvergelijking negeert hoofdletters en spaties aan het begin en eind, dus x@Competitor.com eindigt op
@competitor.com.
De overige tekstachtige velden bieden een beperktere set, dus kies het type dat past bij hoe je wilt vergelijken:
| Veld | Operators die het biedt |
|---|---|
| contains, does not contain, is, ends with, is empty, is not empty | |
| Website-URL | contains, does not contain, is, starts with, ends with, is empty, is not empty |
| Telefoonnummer | is, starts with, contains, is empty, is not empty |
| Verborgen veld (tekst) | De volledige tekstset hierboven |
Numeriek (Getal, Sterrenrating, lineaire schaal, numerieke verborgen en berekende velden)
| Operator | Omschrijving |
|---|---|
| is | Waarde komt exact overeen |
| is not | Waarde komt niet overeen |
| is greater than | Waarde is hoger dan het opgegeven getal |
| is less than | Waarde is lager dan het opgegeven getal |
| is greater than or equal to | Waarde is gelijk aan of hoger dan het opgegeven getal |
| is less than or equal to | Waarde is gelijk aan of lager dan het opgegeven getal |
| is between | Waarde valt binnen een bereik (inclusief) |
| is empty | Veld heeft geen waarde |
| is not empty | Veld heeft een waarde |
Selectievakjes en afbeeldingskeuze
| Operator | Omschrijving |
|---|---|
| has checked any of | Minimaal één van de opgegeven opties is aangevinkt |
| has not checked any of | Geen van de opgegeven opties is aangevinkt |
| has checked all of | Elke opgegeven optie is aangevinkt |
| has checked exactly | Aangevinkte opties komen exact overeen met de opgegeven set |
| is empty | Geen opties geselecteerd |
| is not empty | Minimaal één optie geselecteerd |
Dropdown en Keuzerondjes (enkelvoudige selectie)
| Operator | Omschrijving |
|---|---|
| is | Geselecteerde optie komt exact overeen |
| is not | Geselecteerde optie komt niet overeen |
| is empty | Niets geselecteerd |
| is not empty | Een optie is geselecteerd |
Schakelaar (en boolean-berekende velden)
| Operator | Omschrijving |
|---|---|
| is on | De schakelaar staat aan |
| is off | De schakelaar staat uit |
Handtekening
| Operator | Omschrijving |
|---|---|
| is signed | Er is een handtekening geplaatst |
| is not signed | Er is geen handtekening geplaatst |
Bestandsupload
| Operator | Omschrijving |
|---|---|
| has file | Minimaal één bestand is geüpload |
| has no file | Geen bestand geüpload |
Datumkiezer en Tijdkiezer
| Operator | Omschrijving |
|---|---|
| is | Exacte overeenkomst |
| is not | Komt niet overeen |
| is before | Voor de opgegeven datum/tijd |
| is after | Na de opgegeven datum/tijd |
| is between | Valt binnen een datum/tijdbereik |
| is empty | Geen waarde geselecteerd |
| is not empty | Heeft een waarde |
Rangschikking
| Operator | Omschrijving |
|---|---|
| option is ranked first | De opgegeven optie staat op de eerste positie |
| option is ranked last | De opgegeven optie staat op de laatste positie |
| option is ranked above | De opgegeven optie staat hoger dan een andere optie |
Matrix / Raster
| Operator | Omschrijving |
|---|---|
| row answer is | Een specifieke rij heeft het opgegeven antwoord |
| row answer is not | Een specifieke rij heeft het opgegeven antwoord niet |
| row is answered | Een specifieke rij is beantwoord |
| row is not answered | Een specifieke rij is niet beantwoord |
Betaling
| Operator | Omschrijving |
|---|---|
| amount equals | Het betalingsbedrag komt exact overeen |
| amount is greater than | Het betalingsbedrag is hoger dan de opgegeven waarde |
| amount is less than | Het betalingsbedrag is lager dan de opgegeven waarde |
| is completed | Betaling is succesvol verwerkt |
| is not completed | Betaling is nog niet verwerkt |
Velden die je niet kunt observeren
Schedule appointment en Documents kunnen doel zijn van een zichtbaarheidsactie, maar nooit bron van een conditie. Een boeking wordt aan de inzending gekoppeld in plaats van opgeslagen als een gewoon antwoord, en een Documents-blok verzamelt helemaal geen antwoord. Gebruik eerdere kwalificatieantwoorden om een van beide te tonen of te verbergen. Elke zichtbare Schedule appointment-vraag moet geboekt zijn vóór de inzending; een verborgen vraag blokkeert dit niet. Zie Cal.com-planning met logica.
Doelkeuze
Elke actie heeft een doel nodig — het element waarop het van toepassing is. Het doel hangt af van het actietype:
| Actietype | Doel | Voorbeeld |
|---|---|---|
| Toon / Verberg | Elk blok — een vraag, alinea, afbeelding, lay-outcontainer of een specifieke optie in een keuzeveld | Toon een "Goede keuze!"-alinea wanneer een optie wordt gekozen |
| Maak verplicht / Maak optioneel | Een vraag | Vereis "Dieetwensen" alleen voor aanwezigen ter plaatse |
| Stel volgende pagina in | Een pagina | Sla over naar pagina 5 voor terugkerende klanten |
| Bereken waarde | Een berekend veld | Tel drie sterrenratingscores op tot een totaal |
| Stel betalingsbedrag in | Een Payment-veld | Verhoog de prijs met 15 wanneer "Snelle levering" aan staat |
| Voorkom navigatie naar volgende pagina / Voorkom verzending van formulier | Geen doel nodig (alleen het bericht) | Verhinder verzending totdat de schakelaar voor voorwaarden aan staat |
Toon en Verberg reiken verder dan vragen. Richt je op elk blok op het canvas — een alinea, kop, afbeelding of lay-outcontainer — om een notitie te tonen die standaard verborgen was, of om inhoud te verbergen zodra die niet langer relevant is. Ze kunnen ook afzonderlijke opties in een keuzeveld als doel hebben, niet alleen de hele vraag. Verberg eerst een blok via het blokmenu en schrijf vervolgens een regel om het te tonen.
Hoe meerdere regels worden gecombineerd
Elke regel staat op zichzelf, en ze worden allemaal samen geëvalueerd. Regels worden van boven naar beneden gelezen, over logicablokken heen, in documentvolgorde. Hoe meerdere regels op hetzelfde doel worden gecombineerd, hangt af van de actie.
| Actie | Hoe meerdere regels combineren |
|---|---|
| Toon / Verberg, Maak verplicht / Maak optioneel | Alleen een regel waarvan de condities overeenkomen, claimt het doel, dus regels stapelen als een of: het blok wordt getoond als een overeenkomende regel het toont. Een regel die niet overeenkomt, past het tegenovergestelde toe maar claimt niets, dus een latere overeenkomende regel wint alsnog. |
| Stel volgende pagina in | Een sprong werkt wanneer de respondent op de pagina met de vragen die de regel leest op Volgende klikt, en op geen enkele andere pagina. Van de regels die daar werken, wint de eerst overeenkomende. Een regel die alleen verborgen of berekende velden leest, werkt op elke pagina, maar springt alleen vooruit. |
| Bereken waarde | Elke overeenkomende regel wordt uitgevoerd, in volgorde, op de lopende waarde. Niets claimt iets. |
| Stel betalingsbedrag in | Alleen een regel "instellen op" waarvan de condities overeenkomen, claimt de prijs, dus de eerste overeenkomende regel is eigenaar en meerdere regels "instellen op" kunnen elk een prijsniveau instellen. "Verhogen met" en "Verlagen met" claimen nooit — ze stapelen in volgorde op het lopende bedrag. |
| Geen regel komt overeen | Het blok keert terug naar zijn standaard — verborgen als het standaard verborgen was, anders zichtbaar. |
Zo kun je meerdere regels op hetzelfde blok richten zonder dat ze elkaar tegenwerken. Een feedbackformulier heeft een Keuzerondjes-vraag — “Waar kunnen we je mee helpen?” — met vier opties, en een e-mailveld “Mogen we contact met je opnemen?” dat standaard verborgen is. Vier regels tonen elk datzelfde e-mailveld (plus hun eigen vervolgvraag) voor hun optie. Het e-mailveld verschijnt ongeacht welke optie wordt gekozen, en blijft alleen verborgen als geen enkele optie overeenkomt.
Vaak volstaat een enkele regel
Om een blok zichtbaar te maken voor meerdere antwoorden is één regel met Elk en een conditie per antwoord — of één enkele is not empty-conditie die ze allemaal dekt — makkelijker te lezen dan vier regels. Grijp naar meerdere regels wanneer elke optie ook een eigen, aparte vervolgvraag nodig heeft.
Conflicterende regels
Wanneer twee regels het oneens zijn over hetzelfde doel — de ene Toont een blok terwijl de andere het Verbergt, of de ene maakt een veld verplicht terwijl de andere het optioneel maakt — en beide condities tegelijk overeenkomen, wint de eerste regel. De latere, verliezende regel wordt in de editor gemarkeerd: “Deze actie is nooit van toepassing — een eerdere regel bepaalt dit doel al. De volgorde van de regels beslist: de eerste regel wint.”
Eén uitzondering op de volgorde: een regel waarvan de conditie een berekend veld leest, wordt uitgevoerd na de regel die het schrijft, ongeacht de documentvolgorde, zodat een score altijd berekend is voordat er iets op vertakt. Regels die elkaars berekende velden in een lus schrijven, geven een publicatiewaarschuwing die de keten benoemt — doorbreek de lus zodat waarden voorspelbaar worden opgelost.
Verborgen wint van verplicht
Een vraag die uiteindelijk verborgen is, is nooit verplicht — of hij nu door een regel verborgen werd of via het blokmenu verborgen is zonder regel om hem weer te tonen. Het sterretje verdwijnt en de inzending wordt niet geblokkeerd — anders zou een respondent vastzitten in een formulier door een veld dat hij niet kan zien.
Veelgebruikte patronen
Toon een vervolgvraag op basis van een eerder antwoord
Een tevredenheidsonderzoek vraagt “Hoe beoordeel je je ervaring?” met een 1-5 sterrenrating. Een logicablok eronder gebruikt de conditie “rating is less than or equal to 3” met de actie Toon, gericht op een tekstgebiedveld dat vraagt “Wat kunnen we verbeteren?” Respondenten die 4 of 5 geven, zien de vervolgvraag nooit.
Toon een bericht wanneer een optie wordt gekozen
Een aanmeldformulier heeft een keuzerondje-vraag: “Welk abonnement past het best bij jou?” Eronder staat een alinea — “Goede keuze! Ons Pro-abonnement bevat prioritaire ondersteuning.” — die standaard verborgen is met Verberg uit het blokmenu. Een logicablok maakt hem zichtbaar: als abonnement is “Pro”, Toon de alinea. De aanmoedigende notitie verschijnt alleen voor wie Pro kiest en blijft voor alle anderen verborgen.
Vertakking naar verschillende pagina’s op basis van een selectie
Een evenementregistratieformulier heeft een keuzerondje-vraag: “Bent u aanwezig ter plaatse of op afstand?” Twee logicablokken volgen:
Regel 1 — conditie: aanwezigheid is “Ter plaatse”, actie: Stel volgende pagina in “Locatiedetails”.
Regel 2 — conditie: aanwezigheid is “Op afstand”, actie: Stel volgende pagina in “Streaming-instellingen”.
Regel 3 — conditie: aankomsttijd is not empty, actie: Stel volgende pagina in “Bevestiging”. Aankomsttijd is een verplichte vraag op “Locatiedetails”.
Regel 1 en 2 lezen de vraag aanwezigheid, dus ze werken wanneer de respondent de pagina ervan verlaat. Daarna gaat Volgende in paginavolgorde verder. Regel 3 leest een vraag op “Locatiedetails”, dus die werkt wanneer de respondent die pagina verlaat. Wie ter plaatse aanwezig is, slaat dan “Streaming-instellingen” over. Elk pad verzamelt alleen relevante informatie, waarna beide paden samenkomen op een gedeelde “Bevestiging”-pagina.
Bereken een score en vertak daarop
Een leadkwalificatieformulier heeft drie sterrenratingvragen: budget, tijdlijn en bevoegdheid. Een berekend veld met de naam “Leadscore” gebruikt een logicablok met de actie Bereken waarde om de waarde van elke rating op te tellen. Een tweede logicablok leest het berekende veld: als Leadscore is greater than 12, Stel volgende pagina in “Prioritaire opvolging”; anders spring naar de standaard bevestigingspagina.
Reageer op een verborgen veldwaarde
De URL vult een verborgen veld met de naam plan (bijv. ?plan=enterprise). Een logicablok controleert: als
plan is “enterprise”, Toon de vraag “Toegewijde accountmanager” en Maak verplicht
het veld “Bedrijfsgrootte”. Respondenten op het gratis abonnement zien deze vragen nooit.
Blokkeer verzending op basis van een berekend totaal
Een bestelformulier berekent een lopend totaal. Een logicablok gebruikt de conditie: als Ordertotaal is less than 10, Voorkom verzending van formulier. De respondent kan niet verzenden totdat aan de minimale besteldrempel is voldaan.
Terwijl een preventieregel actief is, wordt de knop als niet-beschikbaar weergegeven en krijgt de respondent te horen waarom. Typ de reden in Bericht dat aan de respondent wordt getoond op de actierij — “Je bestelling moet minstens 10 bedragen” — zodat ze weten welk antwoord ze moeten aanpassen. Laat het leeg en het formulier valt terug op “Dit formulier kan niet worden verzonden met de huidige antwoorden.” (of “U kunt niet doorgaan naar de volgende pagina met de huidige antwoorden.” voor een navigatieblok). Wanneer meerdere preventieregels tegelijk afgaan, bepaalt de eerste regel met een bericht de tekst.
Test logica met Voorbeeld
Nadat je je regels hebt ingesteld, schakel je over naar Voorbeeld in de bovenste werkbalk en vul je het formulier in zoals een respondent dat zou doen. Logica wordt in realtime geactiveerd in Voorbeeld, zodat je elke vertakking, elk verborgen veld en elke validatieblokkering kunt controleren voordat je publiceert.