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

0 votes

Guten Tag,

ich habe ein Problem, bei dem ich gar nicht weiß, wie ich es am besten angehen kann:
Zur Erfassung von 2 aufeinanderfolgender Daten habe ich je 2 Dropdown-Menüs kombiniert, zur Auswahl für Monat und Jahr, d.h. untereinander wird (Start) Monat A und Jahr A, (Ende) Monat B und Jahr B abgefragt. Da Start-Datum A logischerweise immer vor End-Datum B liegen sollte, würde ich gerne eine Prüfung einbauen, die einen Fehler anzeigt, wenn Datum A > Datum B. Gibt es dazu denn eine Möglichkeit, die alle vier Variablen berücksichtigt?

Liebe Grüße

ago in SoSci Survey (dt.) by s101311 (190 points)

1 Answer

0 votes

da Start-Datum A logischerweise immer vor End-Datum B liegen sollte, würde ich gerne eine Prüfung einbauen, die einen Fehler anzeigt, wenn Datum A > Datum B.

Ich würde die Option in Betracht ziehen, sich auf den Menschenverstand der Befragten zu verlassen. Und wo es grob falsch ist, würde ich das als Indikator nehmen, dass es jemand mit dem Ausfüllen vielleicht nicht so ganz ernst genommen hat.

Aber natürlich ist auch eine technische Lösung möglich. Wenn wir z.B. die folgende Kodierung haben:

Monat = 1(Januar) bis 12(Dezember)
Jahr = 1(2000) is 21(2020)

Dann können Sie relativ einfach einen String Jahr-Monat daraus machen, z.B.

$datum1 = sprintf('%02d-%02d', (int)value('Jahr'), (int)value('Monat'));

Okay, "einfach" ist das auf den ersten Blick nicht. Also: Das (int) sorgt dafür, dass die mittels value() eingelesene Zahl auch wirklich als Zahl verwendet wird. Und das sprintf() vorne sorgt für das Format XX-XX mit führenden Nullen.

Da würde man für März 2010 also z.B. die Wert 3 und 11 bekommen und den String "11-03". Wenn man das auch mit dem zweiten Werte-Paar macht, dann kann man am Schluss einfach vergleichen:

if ($datum2 <= $datum1) {
  repeatPage()
}
ago by SoSci Survey (233k points)
Vielen lieben Dank für die Antwort!
Ich verstehe leider noch nicht ganz, wie ich das dann genau zum Laufen bringen kann in meinem Code. Bei meinem Versuch klappt es leider nicht, aber ich muss auch leider sagen, dass ich noch nicht so gut durchblicke und daher auch nicht weiß, ob ich einfach etwas Grundlegendes falsch mache. Was ich bisher habe:

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

(function () {

$datum1 = sprintf('%02d-%02d', (int)value('JJ01'), (int)value('JM01')); // Variable Jahr 1 JJ, Monat 1 JM
$datum2 = sprintf('%02d-%02d', (int)value('JA01'), (int)value('JF01')); //  Variable Jahr 2 JA, Monat 2 JF

if ($datum2 <= $datum1) {
  repeatPage()
}

 })();

// -->
</script>

Muss ich die Variablen davor vielleicht zuerst definieren?

Vielen Dank!
Der Code ist PHP-Code, kein JavaScript. Er muss (als "PHP-Code") auf die folgende Seite im Fragebogen ganz oben.
Gibt es denn eine Möglichkeit, dasselbe mit JavaScript auf der selben Seite zu machen?
Ja, aber da wird es ein wenig anspruchsvoller. Dafür müssten Sie sich mal die Sache mit document.getElementById() ansehen, damit die EIngabefelder finden und per .value die Eingaben nutzen. Statt sprintf() müssten Sie die Länge mittels IF prüfen und ggf. eine "0" voranstellen.
Und wie würde das ca. aussehen?
Ich benutze bereits JS im Fragebogen zum Ein- und Ausblenden von Fragen und document.getElementById() sowie if Prüfungen sind mir somit bekannt. Den gesamten Code bekomme ich nicht zusammen. Könnten Sie mir bitte helfen?
Da werden Sie sich selbst ein wenig reinfuchsen müssen. Als erstes sollten Sie klären, wann die Prüfung erfolgen soll? Beim Klick auf "Weiter"? Dann brauchen Sie noch SoSciTools.attachCheck() - dieser Funktion übergeben Sie als Parameter eine Funktion, welche die Eingabe prüft und dann entweder "true" (alles okay) oder "false" zurückgibt.

Falls die Prüfung (auch) an einer anderen Stelle erfolgen soll, müssen Sie dafür einen passenden Event-Handler finden.
...