0 votes
in SoSci Survey (dt.) by s260820 (190 points)

Hallo,

ich habe momentan im Fragebogen folgende offene Texteingabefrage (SD02): Wie viele Personen leben in Ihrem Haushalt?

Sollten die Befragten hier einen Wert über 0 angeben, soll auf der selben Seite folgende Frage (SD03) erscheinen: Wie viele Kinder unter 6 Jahren leben in Ihrem Haushalt?

Diese Frage soll aber eben nur dann erscheinen, wenn aus SD02 hervorgeht, dass im Haushalt mehrere Leute wohnen.

Da die Frage auf der selben Seite erscheinen soll wird ja Java benötigt. Leider sind meine Kenntnisse hier nicht so gut, und habe es trotz guter Anleitung (https://www.soscisurvey.de/help/doku.php/de:create:dynamic) noch nicht geschafft. Es wird erklärt, wie es für eine Ja/Vielleicht/Nein-Frage funkioniert, etc., aber leider nicht wie es bei einer offenen Texteingabe gehen soll.

Momentan sieht mein Code wie folgt aus:

Kann man mir eventuell kurz sagen, wo der Fehler ist bzw. auf was ich achten soll?

Vielen Dank und freundliche Grüße :)

by SoSci Survey (327k points)
Bitte finden Sie zunächst die HTML-ID des Texteingabefelds heraus:
https://www.soscisurvey.de/help/doku.php/de:general:browser-tools

Ein value() gibt es im JavaScript-Code nicht. Dort funktioniert es so, dass Sie zunächst das Element heraussuchen, also das Eingabefeld:

var input = document.getElementById("SD02_01");

und anschließend fragen Sie dessen Eigenschaft .value ab.

if (parseInt(input.value) > 0) {
 ...
}

Warum noch parseInt()? Weil die Eingabe erst einmal Text ist, und für den Größenvergleich in eine Zahl umgewandelt werden muss. Hier ist Javascript etwas strenger als PHP.

1 Answer

0 votes
by s260820 (190 points)
edited by SoSci Survey

Vielen Dank für die schnelle und hilfreiche Antwort. Ich bin jetzt ein gutes Stück weitergekommen.

Tatsächlich funktioniert es jetzt so weit, dass das Eingabefeld der Frage SD03 erst eingeblendet wird, wenn eine Zahl höher als 0 eingeben wird.
Allerdings passiert das nicht direkt. Also man schreibt beispielsweise die Zahl "2" in das Textfeld und folglich passiert erstmal nichts.
Erst wenn man wieder in das Textfeld, in dem man die "2" reingeschrieben hat reingeht, wird die nächste Frage (SD03) bzw. Texteingabe eingeblendet. Ich hoffe es ist verständlich, was ich meine.

Zudem wird bislang lediglich die Texteingabe der Frage SD03 ausgeblendet. Wie bekomme ich es hin, dass auch der Text der Frage zunächst ausgeblendet wird?

Hier nochmal der Code zum jetzigen Zeitpunkt:

<script type="text/javascript">
<!--

var input = document.getElementById("SD02_01");
var frage = document.getElementById("SD03_01");  // HTML-ID der Texteingabe
 
function toggle() {

if (parseInt(input.value) > 0) {
 frage.style.display = "";
}   else {
// Mit der Anzeigeoption "none" wird die Frage ausgeblendet
    frage.style.display = "none";
  }
}
 
// Die Funktion soll jedesmal ausgeführt werden
SoSciTools.attachEvent(optionA, "click", toggle);

 
// Und jetzt gleich soll sie auch ausgeführt werden, damit die Anzeige zu Beginn korrekt ist
// (z.B. ausblenden der Texteingabe zu Beginn)
toggle();
// -->
</script><script type="text/javascript">
<!--

var input = document.getElementById("SD02_01");
var frage = document.getElementById("SD03_01");  // HTML-ID der Texteingabe
 
function toggle() {

if (parseInt(input.value) > 0) {
 frage.style.display = "";
}   else {
// Mit der Anzeigeoption "none" wird die Frage ausgeblendet
    frage.style.display = "none";
  }
}
 
// Die Funktion soll jedesmal ausgeführt werden
SoSciTools.attachEvent(input, "click", toggle);

 
// (ausblenden der Texteingabe zu Beginn)
toggle();

</script>

Vielen Dank für die Hilfe :)

by SoSci Survey (327k points)
Ich glaube, Sie haben da grade zwei Codes - die obere Hälfte kann m.E. raus.

> Allerdings passiert das nicht direkt.

Das liegt daran, dass Sie auf ein "click" prüfen. Ersetzen Sie hier

SoSciTools.attachEvent(input, "click", toggle);

das "click" durch ein "keyup". Dann wird geprüft wann immer eine Taste im Eingabefeld losgelassen wird.

> Zudem wird bislang lediglich die Texteingabe der Frage SD03 ausgeblendet.

Nun ja, das leigt daran, dass die Kennung in dieser Zeile

var frage = document.getElementById("SD03_01");

sich eben genau auf das Eingabefeld bezieht. Das Blockelement, welche die ganze Frage umspannt, müsste hingegen die Kennung SD03_qst (oder ähnlich) haben.
by s260820 (190 points)
Vielen Dank. Es funktioniert jetzt alles :)

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

...