0 votes
in SoSci Survey (dt.) by s200544 (130 points)

Liebes Support-Team,

in meinem Fragebogen möchte ich einen Filter so einbauen, dass eine Frage nur auftaucht, wenn die vorherige Frage mit „ja“ beantwortet wurde. Die Anschlussfrage soll auf der gleichen Seite eingeblendet werden, weshalb die normale Filterfunktion nicht ausreicht. Ich habe hier im Forum schon gesucht und verschiedene Beispiele für ähnliche Probleme gefunden und versucht, einen Java-Code für mein Beispiel zu basteln. Leider habe ich gar keine Ahnung von Programmieren und bisher hat es nicht geklappt. Ich hab wahrscheinlich auch nicht den richtigen Antwortcode für "keine Angabe" (siehe unten). Falls jemand eine Idee hat, was ich noch verändern muss, würde ich mich riesig freuen!

Tausend Dank im Voraus!

Und hier die Frage: Nach Antwort „ja“ soll eine weitere Frage folgen („Prozenteinschätzung“, bei Antwort „nein“ oder „keine Angabe“ soll keine weitere Frage folgen. Ich bin mir mit dem Antwort-Code für „keine Angabe“ nicht sicher. SoSciSurvey hat den Missing Value hier als „-9“ kodiert, daher hab ich als HTML-Code für diese Antwort „M101_09“ genommen, allerdings müsste es ja eigentlich „-09“ heißen…

    <script type="text/javascript">
<!--
var optionA = document.getElementById("M101_01");  // HTML-ID der Auswahloption "Ja"
var optionB = document.getElementById("M101_02");  // Option "nein"
var optionC = document.getElementById("M101_09");  // Option "missing"
var frage = document.getElementById("M115_qst");  // HTML-ID der Prozenteinschätzung
 
 if (optionA.checked) {
    // Wurde "Ja" ausgewählt, dann wird die Frage angezeigt
   
  } else {
    // Mit der Anzeigeoption "none" oder "keine ANgabe" wird die Frage ausgeblendet
     frage.style.display = "" || frage.style.display = "none";
  }
}
 
// Die Funktion soll jedesmal ausgeführt werden, wenn eine der drei Optionen angeklickt wird
SoSciTools.attachEvent(optionA, "click", toogle);
SoSciTools.attachEvent(optionB, "click", toogle);
SoSciTools.attachEvent(optionC, "click", toogle);
 
// Und jetzt gleich soll sie auch ausgeführt werden, damit die Anzeige zu Beginn korrekt ist
// (z.B. ausblenden der Texteingabe zu Beginn)
toogle();
// -->
</script>
by SoSci Survey (305k points)
Aufgund des bloßen Anblicks des Codes ist das nur schwer zu beantworten. Werfen Sie doch mal einen Blick in die Fehlerkonsole Ihres Browsers, um das Problem einzugrenzen.

Posten Sie gerne auch einen Pretest-Link direkt (!) zur betroffenen Seite, dann schaue ich auch mal in die Fehlerkonsole.

> Ich bin mir mit dem Antwort-Code für „keine Angabe“ nicht sicher.

Auch da helfen die Entwickler-Konsolen der Browser. Da kann man mit dem "Inspektor" die Auswahlfelder einfach anklicken und sieht die HTML-ID.

Die Ausweichoption sollte eigentlich den Antwortcode -1 und die HTML-ID ...R1 haben.
by s200544 (130 points)
edited by s200544
Vielen Dank für die schnelle Antwort! Anbei der Link zum Pretest: https://www.soscisurvey.de/test289913/?act=cjsTYwZ1n7eUL2ojAF9FhIzh

Die Prozentabfrage soll eigentlich nur erscheinen, wie die Frage darüber mit "ja" beantwortet wurde. Ich habe bereits probiert, über den Entwicklermodus des Browsers an die Antwortcodes zu kommen, allerdings wird mir der Fall "keine Angabe" dort nicht angezeigt, soweit ich das erkennen kann.

Vielen Dank schonmal im Voraus!
by SoSci Survey (305k points)
Wie Sie einen gültigen Pretest-Link erstellen, können Sie hier nachlesen:
https://www.soscisurvey.de/help/doku.php/de:survey:pretest
by s200544 (130 points)
Danke für den Hinweis, hier der Link zum gültigen Pretest: https://www.soscisurvey.de/test289913/?act=bDJgsqGZNvefqgyjXFonIrRZ

2 Answers

0 votes
by SoSci Survey (305k points)

Die Fehlerkonsole des Browsers beschwert sich als erstes über diese Zeile:

// Mit der Anzeigeoption "none" oder "keine ANgabe" wird die Frage ausgeblendet
 frage.style.display = "" || frage.style.display = "none";

Stimmt, denn der logische "Oder"-Operator (||) hat bei einer Zuweisung nichts zu suchen und macht hier auch inhaltlich wenig Sinn. Wenn Sie die Frage ausblenden möchten, schreiben Sie:

frage.style.display = "none";

Wenn Sie die Frage hingegen anzeigen möchten, schreiben Sie:

 frage.style.display = "";

Wenn Sie das geändert haben und es funktioniert noch nicht, dann sehen wir uns den nächsten Fehler in der Konsole an. Sagen Sie bitte einfach kurz in den Kommentaren bescheid.

by s200544 (130 points)
Super, das hat mir sehr weitergeholfen! Ich habe den Code so verändert, dass die nachfolgende Frage (Prozenteinschätzung) schonmal ausgeblendet wird, sobald die vorherige Frage mit "nein" beantwortet wird.
Das Einzige, was jetzt noch nicht klappt, ist dass die letzte Frage (Prozenteinschätzung) erst dann auf der Seite auftauchen soll, wenn die vorherige Frage mit "ja" beantwortet wird, und nicht direkt dort steht.
Und ich bin immer noch nicht an den Antwortcode für die "keine Angabe" gekommen.

Hier nochmal ein aktueller Pretest-Link: https://www.soscisurvey.de/test289913/?act=GBGw8hO1MlczOs6LjNBX54mN
by SoSci Survey (305k points)
Im Moment stolpert der Code noch darüber, dass optionC undefiniert ist.

Das dürfte damit zusammenhängen, dass Sie ein Auswahlfeld für den Fall suchen, dass kein Auswahlfeld ausgewählt ist. Dieses gibt es aber nicht. Sie können nur darauf reagieren, ob existierende Auswahlfelder angeklickt werden und sind.

Was Sie also machen, ist zu prüfen, ob keines der beiden Felder ausgewählt ist.

> Das Einzige, was jetzt noch nicht klappt, ist dass die letzte Frage (Prozenteinschätzung) erst dann auf der Seite auftauchen soll, wenn die vorherige Frage mit "ja" beantwortet wird,

Nehmen Sie erstmal alles mit optionC raus, dann läuft der Code weiter. Und durch den Aufruf von toogle(), den Sie ja schon haben, sollte das mit dem Ausblenden dann auch schon funktionieren.
by s200544 (130 points)
Nachdem ich Option C rausgeschmissen habe, klappt es!
Nun möchte ich eine ganze Fragebogenseite mit mehreren Fragen erstellen, auf der immer abwechselnd eine "ja/nein"-Frage beantwortet werden muss und dann je nach Antwort die Prozentabfrage folgt. Dann kommt wieder eine "ja/nein"-Frage (bzw. eigentlich zwei, aber nur die letzte von beiden ist der Filter) und dann ggf. wieder Prozentabfrage u.s.w.

Ich habe für jede Filterfrage einen eigenen HTML-Code geschrieben und die Fragen wie folgt angeordnet: Frage 1 – Frage 2 – Prozenteinschätzung – HTML-Filter (der sich auf Frage 2 bezieht) – Frage 3 – Frage 4 – Prozenteinschätzung – HTML-Filter (bez. Auf Frage 4) – …
Wenn ich mir die Seite nun im Test anschaue, ploppt die Prozenteinschätzung nach „Ja“ bei Frage 2 nicht mehr auf, nur bei der letzten Filterfrage funktioniert es. Haben Sie eine Idee, woran das liegt, und wie ich die Fragen und Filterelemente so anordne, dass bei allen Fragen der Filter aktiv ist?

Anbei wieder ein Pretest: https://www.soscisurvey.de/test289913/?act=ejKrXxDCYZefrhN0jW09GXPn
by SoSci Survey (305k points)
Wenn Sie das ganze nicht als Funktion kapseln (was sich anbieten würde, wenn es immer dasselbe Schema ist), dann müssen Sie jeweils andere Namen für die Variablen verwenden. Also z.B. optionA1, optionB1, optionA2, optionB2 und auch die Funktion muss anders heißen.

Alternativ können Sie alles in eine Funktion verpacken und dieser einfach nur die Kennungen übergeben, die Sie bisher in den ersten drei Zeilen definieren.
by s200544 (130 points)
Da es um 14 Fragen geht, wäre es am besten alles in eine Funktion zu verpacken. Gibt es dazu schon eine Anleitung hier im Support-Forum? Habe bei meiner Suche nur diesen thread gefunden: https://support.soscisurvey.de/?qa=18899/mehrere-filterfragen-pro-seite-ausklappen
by SoSci Survey (305k points)
edited by SoSci Survey
by s200544 (130 points)
Vielen Dank für die hilfreiche Anleitung! Wie binde ich die gekapselte Funktion und die Klassen-Funktion auf der Fragebogenseite korrekt ein? Aktuell habe ich alle Fragenelemente auf die Seite gepackt und zum Schluss ein Textelement für die gekapselte Funktion und dann ein weiteres Textelement, das die Zuordnung der Filterfragen und Folgefragen enthält. Jetzt funktioniert das Ein- und  Ausblenden allerdings nicht mehr. Müssen die beiden Funktionen in ein Textelement und an welcher Stelle auf der Fragebogenseite müssen sie stehen?
Hier wieder der Pretest-Link: https://www.soscisurvey.de/test289913/?act=zkfh1GreqWVdqVjNZ6ERXz3u

Vielen Dank vorab!
by SoSci Survey (305k points)
Soweit alles korrekt - Sie müssten die "Darstellung" des Textelements nur noch auf "HTML-Code" ändern, damit es nicht als Text eingebunden wird, vgl. https://www.soscisurvey.de/help/doku.php/de:create:javascript
by s200544 (130 points)
Komisch, das hatte ich bereits gemacht (siehe Bild). Trotzdem wird mir in der Fragenvorschau ein Text angezeigt, was bei anderen Java-Codes bisher nicht so war...
0 votes
by s200544 (130 points)

by SoSci Survey (305k points)
Bitte ergänzen Sie zu Beginn noch

<script type="text/javascript">

Und am Ende das passende

</script>

Das

// -->

brauchen Sie nur, wenn Sie eingangs hinter dem <script>-Tag auch ein

<!--

stehen haben.
by s200544 (130 points)
Alles klar, habe ich für beide Textelemente ergänzt. Jetzt funktioniert der Filter zumindest bei der ersten der 14 Fragen, allerdings nicht beim Rest und die Folgefrage wird von Anfang an eingeblendet, statt erst nach "ja" bei der Filterfrage zu erscheinen.

https://www.soscisurvey.de/test289913/?act=a50eBmXkI4bY30o3nnnQbPVW
by SoSci Survey (305k points)
Die Fehlerkonsole im Browser sagt:

> Uncaught ReferenceError: toggle is not defined

Bitte beachten Sie, dass ich in der Ergänzung der Anleitung den Typo toogle() in toggle() korrigiert habe. Das müssten Sie noch vereinheitlichen, unten steht bei Ihnen toggle(), oben toogle().
by s200544 (130 points)
Jetzt klappts :-)

Tausend Dank nochmal für die vielen und verständlichen Erklärungen!
by SoSci Survey (305k points)
Sehr schön. Bittesehr :)

Ein Tipp noch: Blenden Sie den Schiebregler zu Beginn aus - Sie werden sonst viele Fälle mit -9 haben, wo Sie nicht wissen, ob die Leute nicht antworten wollten oder ob sie meinten "ah, der Regler ist schon bei 0, das passt so".
by s200544 (130 points)
Alles klar, vielen Dank für den Hinweis :-)

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...