Skip to main content
Mit der Quiz-API kommuniziert Ihr eigenes JavaScript mit einem Quiz, während ein Besucher es ausfüllt. Sie können auslesen, was er geantwortet hat, einen Block ändern, zu einem Schritt springen oder absenden – ganz ohne das Quiz im Builder anzufassen. Sie können sie überall einsetzen, wo JavaScript auf der Seite läuft: im Custom Code des Quiz, in einem Skript-Block oder in einem Snippet Ihres Tag-Managers.

Die API abrufen

Die API wird Ihnen vom Event ll-quiz-init als event.detail.llQuizApi übergeben. Bewahren Sie dieses Objekt auf und nutzen Sie es, wann immer Sie es brauchen.
Ihr Skript kann vor oder nach dem Laden des Quiz ausgeführt werden. Registriert es sich spät, wird ll-quiz-init automatisch erneut an es gesendet – dieses Muster funktioniert also immer.
Jedes andere Quiz-Event trägt dieselbe llQuizApi, sodass Sie auch auf einen Schritt oder eine Antwort reagieren und direkt handeln können. Siehe Quiz-Events.

Schritte und Blöcke über den Namen

Jede Funktion, die einen Schritt oder Block entgegennimmt, akzeptiert dessen Namen oder ID. Namen sind die im Builder vergebenen Bezeichnungen – sie nutzen Sie im Normalfall. IDs werden generiert und sehen aus wie block-3f9c….
Geben Sie jedem Block und jedem Schritt im Builder einen klaren Namen. Mehr Einrichtung braucht die API nicht.
Tragen zwei Blöcke oder zwei Schritte denselben Namen, wird der erste in der Quiz-Reihenfolge verwendet.

Die Antworten auslesen

getAnswers() gibt alle bisher gegebenen Antworten zurück, einen Eintrag pro Block. getAnswersSimple() liefert dieselben Antworten als einfaches Objekt mit dem Label als Schlüssel. Ausgeblendete Blöcke und leere Antworten bleiben unberücksichtigt.
Das sind genau die fields und fieldsSimple, die die Events mitführen – Code, der mit dem einen umgeht, beherrscht also auch das andere.

Wissen, wo der Besucher steht

index beginnt bei 0. isSubmitted wird true, sobald das Quiz in diesem Besuch abgesendet wurde.

Blöcke finden

Listen enthalten nur Blöcke, die einen Wert speichern. Überschriften, Absätze, Bilder und Ähnliches erscheinen nie. getBlock() findet zusätzlich Schaltflächen (Continue, Previous, Submit, Button), sodass Sie deren Text ändern oder sie deaktivieren können.
getBlock() gibt nie undefined zurück. Passt nichts oder kann der Block keinen Wert speichern, erhalten Sie einen Platzhalter-Block: Jeder Aufruf darauf schreibt eine Warnung ins Log und bewirkt nichts, getValue() gibt "" zurück. Ihr Code stürzt nie ab – prüfen Sie aber die Konsole, wenn etwas wirkungslos bleibt.
Eingabefelder (Text, E-Mail, Telefon, Zahl, Textarea, Datum, Geburtsdatum, Postleitzahl, Adresse, OTP), Auswahlen (Multiple Choice, Bildauswahl, Select), Checkbox, Range Slider, Upload, Unterschrift und versteckte Felder.Alles übrige dient der Darstellung oder Navigation: Überschrift, Absatz, Bild, Video, Trenner, Liste, Loader, Countdown, Fortschritt, Accordion, Links, Custom Code, Tracking und die Schaltflächen. Ein Aufruf von getValue(), setValue(), reset() oder validate() auf einem davon löst einen Fehler aus. Container sind transparent: Die Blöcke darin werden wie jeder andere Block gelistet.

Einen Block auslesen und ändern

Jeder zurückgegebene Block ist dieselbe Art von Objekt – die folgenden Beispiele funktionieren also bei jedem Block, der den jeweiligen Aufruf unterstützt.

Wert

Ein über die API gesetzter Wert löst ll-quiz-value-change mit source: 'api' aus, sodass Ihre Listener ihn von einer Eingabe des Besuchers unterscheiden können.
  • Checkbox: 'checked' oder 'unchecked'
  • Multiple Choice, Bildauswahl, Select: der Wert der Option, zum Beispiel 'pro'
  • Multiple Choice mit mehreren Auswahlen: die Werte, verbunden durch das im Block konfigurierte Trennzeichen
  • Alles übrige: der vom Besucher eingegebene Text

Label und Platzhalter

Labels sind reiner Text – außer bei einer Checkbox, wo HTML für Links zu den Bedingungen erlaubt ist. setLabel() und getLabel() lösen bei Blöcken ohne Label einen Fehler aus.

Optionen

Multiple-Choice-, Bildauswahl- und Select-Blöcke geben ihre Optionen preis:
Ein Aufruf von getOptions() auf einem anderen Block löst einen Fehler aus.

Fehler und Fokus

Schaltflächen

enable() und disable() funktionieren bei Continue-, Submit- und Button-Blöcken und lösen bei allen anderen einen Fehler aus.

Sichtbarkeit

Ein ausgeblendeter Block wird nicht validiert, nicht mit dem Lead übertragen und nicht angezeigt. undefined bedeutet, dass Sie ihn nie geändert haben – der Block folgt dann seinen eigenen Einstellungen.

Validieren

Die Validierung ist asynchron, weil E-Mail-, Telefon- und OTP-Felder gegen einen Server geprüft werden. Ausgeblendete Blöcke bestehen die Prüfung immer.
Schlägt ein Schritt fehl, löst das Quiz außerdem ll-quiz-validation-error mit jedem fehlerhaften Block und dessen Meldung aus, markiert mit source: 'api'. Ein einziger Listener kann damit sowohl die Versuche des Besuchers als auch Ihre eigenen behandeln. Details auf der Events-Seite.
goNext(), goToStep() und submit() validieren zuerst den angezeigten Schritt. Ist er ungültig, bleiben sie stehen, schreiben eine Warnung ins Log und lösen ll-quiz-validation-error aus. goBack() validiert nie. submit() tut genau das, was die Submit-Schaltfläche des Besuchers tut: Der Lead wird gespeichert, ll-quiz-submit wird mit der Serverantwort ausgelöst, der Schutz gegen Mehrfachabsenden greift und die Nach-dem-Absenden-Aktion der Submit-Schaltfläche läuft. In einem Schritt ohne Submit-Schaltfläche sendet das Quiz ab und bleibt, wo es ist. Das zurückgegebene Promise wird aufgelöst, sobald all das abgeschlossen ist.

Rezepte

Alle Funktionen auf einen Blick

Frühere Versionen hatten je Abfragetyp eine eigene Funktion. Sie funktionieren unverändert weiter, sodass Sie bereits geschriebenen Code nicht anpassen müssen. Neuer Code sollte die vereinheitlichten Funktionen verwenden.