0 votes
in SoSci Survey (dt.) by s183638 (125 points)
edited by s183638

Hallo,

ich habe DropDown Fragen die mi JA oder NEIN beantwortet werden können. Hier wird via Javascript geprüft, was angeklikt wurde:

<script type="text/javascript">

function toogle() {
  var dropdown = document.getElementById("KO13");  // Das Eingabefeld der Frage 
  var frage = document.getElementById("KO14_qst");  // Die Frage , die ein-/auszublenden ist
  if (dropdown.value == "1") {  // Hier den Wert (Antwortcode) eintragen, bei dem das zweite Dropdown eingeblendet werden soll
    frage.style.display = "";
  } 
    else if (dropdown.value =="-9") {
        return;
    }
    else {
    frage.style.display = "none";
  }
}

var dropdown = document.getElementById("KO13");  // Das Eingabefeld der Frage 
SoSciTools.attachEvent(dropdown, "change", toogle);  // Bei einer Änderung der Auswahl die Anzeige anpassen
SoSciTools.attachEvent(dropdown, "click", toogle);  // Auch beim Klick prüfen - sonst wird die Änderung evtl. erst beim Verlassen des Dropdowns wirksam
toogle();  // Und zu Beginn auch die korrekte Anzeige sicherstellen

</script>

Die Folgefrage wird ebenfalls mit Javascript versteckt:

<script type="text/javascript">

function hide() {
    var q = document.getElementById("KO14_qst");
    q.style.display = "none";
}
hide();
</script>

Jetzt soll geprüft werden ob eine Antwort gegeben wurde:

$missing01 = getItems('KO14', '==', 1);
$missing02 = getItems('KO06', '==', 1);
$missing03 = getItems('KO10', '==', 1);
$missing04 = getItems('KO12', '==', 1);
$missing05 = getItems('KO08', '==', 1);
$missing = array_intersect($missing01, $missing02, $missing03, $missing04, $missing05);
 
// Überprüfung, ob ein Item unbeantwortet blieb
if (count($missing) > 0) {
  // Die fehlenden Items hervorheben
  foreach ($missing as $item) {
    markFail(id('missing', $item));
  }
  // Meldung anzeigen und Seite wiederholen
  repeatPage('CO03');
}

statt.

Leider kommt man auf die nächste Fragebogenseite, wenn man JA angeklickt hat ABER kein Wert in der Skala eingetragen wurde.

Wo liegt das Problem? Ich darf die Frage nicht mit ja beantworten können, aber keinen Wert übermitteln dürfen.

EDIT 04.10.

EDIT 5.4.2021

by SoSci Survey (302k points)
Okay, wenn ich es korrekt verstehe, gibt es eine Dropdown-Auswahl KO13, deren Variable aber nach KO_61 (1=Ja) umbenannt wurde. Und nur wenn dort "Ja" ausgewählt wurde, sollen die Antworten der Skala KO14 geprüft werden, deren eizige Variablen nach KO_62 umbenanntn wurde. Ist das korrekt?

Das würde als PHP-Code wie folgt aussehen:

$missing62 = (value('KO_61') == 1) && (value('KO_62') < 1);

Das kann man auch über mehrere solche Duos kombinieren:

$missingAny = (
  ((value('KO_61') == 1) && (value('KO_62') < 1)) ||
  ((value('KO_71') == 1) && (value('KO_72') < 1))
);

Haben Sie denn auch Fragen, wo Sie die Skalenbatterien mit mehreren Items verwenden? Nur da brauchen wir das !empty(getItems()).
by s183638 (125 points)
Ihre Annahme ist korrekt. Wird bei KO13 "ja" ausgewählt, klappt die Skalenfrage KO14 auf, die geprüft werden soll.

Dieses Procedere wiederholt sich auch bei nachfolgenden DropDown Auswahlen auf der Seite.

Auf den Skalen selbst, kann man nur einen Punkt setzten. Jede Skala soll aber wie erwähnt geprüft werden.
by SoSci Survey (302k points)
Gut, dann hier noch ein wenig Modifikation für den Code, damit es auch mit dem Markieren klappt. In dem Array oben müssen Sie natürlich noch eine Zeile pro Frage-Pärchen ergänzen.

$pairs = [
  ['KO_61', 'KO_62'],
  ['KO_71', 'KO_72'],
];

$missing = [];
foreach ($pairs as $pair) {
  $filter = $pair[0];
  $question = $pair[1];

  if ((value($filter) == 1) && (value($question) < 1)) {
    $missing[] = $question;
  }
}

// Überprüfung, ob ein Item unbeantwortet blieb
if (count($missing) > 0) {
  // Die fehlenden Items hervorheben
  foreach ($missing as $item) {
    markFail(id('missing', $item));
  }
  // Meldung anzeigen und Seite wiederholen
  repeatPage('CO03');
}

Ich bin nicht 100%ig sicher, ob die markFail()-Funktion mit den Variablen-Aliases zurecht kommt. Falls nicht, müssten wir in der Array-Liste oben noch die Frage-Kennungen ergänzen und in $missing schreiben.
by s183638 (125 points)
Die Prüfung klappt!!! Nur die MarkFail Funktion wie sie vermutet haben nicht. Ansonsten tip-top!
by SoSci Survey (302k points)
Ersetzen Sie die markFail()-Zeile bitte mal wie folgt:

markFail($item);

Wenn das nicht hilft, habe ich unten als Antwort einen Code gepostet, der die Frage-Kennung explizit angibt.

1 Answer

+1 vote
by SoSci Survey (302k points)

Die Prüfung klappt!!! Nur die MarkFail Funktion wie sie vermutet haben nicht. Ansonsten tip-top!

Ales klar, dann kümmern wir jetzt noch um die Markierung der Fragen. Versuchen Sie es mal auf dieser Basis:

$pairs = [
  ['KO_61', 'KO_62', 'KO14'],
  ['KO_71', 'KO_72', 'KO06'],
];

$missing = [];
foreach ($pairs as $pair) {
  $filter = $pair[0];
  $varID = $pair[1];
  $question = $pair[2];

  if ((value($filter) == 1) && (value($varID) < 1)) {
    $missing[] = $question;
  }
}

// Überprüfung, ob ein Item unbeantwortet blieb
if (count($missing) > 0) {
  // Die fehlenden Items hervorheben
  foreach ($missing as $question) {
    markFail($question);
  }
  // Meldung anzeigen und Seite wiederholen
  repeatPage('CO03');
}
by s183638 (125 points)
Für die Funktion markFail() wurden nicht ausreichend Argumente angegeben, 1 Argumente sind zwingend erforderlich. Weitere Details finden Sie in der Anleitung zur Funktion.


Fehler im Fragebogen (Seite 5)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
Fehler im Fragebogen: Undefined offset: 2
Zeile: 15

PHP-Code

012 foreach ($pairs as $pair) {
013   $filter = $pair[0];
014   $varID = $pair[1];
015   $question = $pair[2];
016
017   if ((value($filter) == 1) && (value($varID) < 1)) {
018     $missing[] = $question;
by SoSci Survey (302k points)
Bitte ergänzen Sie folgendes debug()

if (count($missing) > 0) {
  debug($missing);

Was wird denn dann angezeigt?
by s183638 (125 points)
Er schickt mir ebenfalls einen PHP Error mit :

015   $question = $pair[2];

in Rot markiert.

Debug-Information für $missing:
0
by SoSci Survey (302k points)
Sie haben im Array ganz oben schon die dritte "Spalte" ergänzt?
by s183638 (125 points)
edited by s183638
Es funktioniert.

Nun habe ich ein anderes Problem. Klicke ich beim Erstversuch ja an, mache keine Angabe in der Skala, klicke dann aber nach neu Laden Nein, wird der vorherige Wert "Ja" im Datensatz gespeichert. Gibt es die Möglichkeit die Daten erst nach erfolgreicher Prüfung bei "Ja" und einem Skalenwert in den Datensatz zu schreiben?
by SoSci Survey (302k points)
Gespeichert wird immer das, was beim "Weiter" angeklickt ist.

Wenn der Nutzer das auf "Nein" ändert und dann "Weiter" klickt, ist dort auch ein "Nein" gespeichert. Eventuell aber auch was immer auf der Skala angewählt wurde.

Wenn Sie risikoaffin sind, können Sie den Wert bei einem "Nein" mittels put() aus der anderen Variable löschen. Also im FOREACH

  if (value($filter) == 2) {
    put($varID, false, true);
  }

Alternativ können Sie das einfach bei der Auswertung beachten.

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

...