Sie haben die Möglichkeit, zu einem Item mehrere Werte abzufragen - z.B. die Bewertung einer Eigenschaft und deren Wichtigkeit. Im Folgenden wird beschrieben, wie Sie diese Funktion am einfachsten verwenden.
Beispiel 1
Beispiel 2
Bevor Sie eine kombinierte Frage bauen, halten Sie aber bitte einen Moment inne. Gedruckte Fragebögen und Onlinefragebögen unterscheiden sich in wichtigen Punkten – erstere bieten sehr viel Platz in die Breite, letztere erlauben Filterführung und beliebig viele Seiten. Wenn eine tabellarische Darstellung in der gedruckten Version gut aussieht, dann ist es im Onlinefragebogen oftmals besser, mehrere Fragen zu verwenden. Unter Umständen kann man irrelevante Items (z.B. nicht genutzte Angebote) bei den folgenden Teilfragen dann gleich ausblenden.
Hinweis: Bitte lesen Sie unbedingt auch die Hinweise zu Mobilgeräten weiter unten. Beachten Sie bitte auch, dass sich die kombinierten Fragen auf den kleinen Displays von Mobilgeräten oftmals nicht gut darstellen lassen. SoSci Survey kann die Darstellung nur dann dynamisch anpassen, wenn Sie mit der Funktion show()
arbeiten.
Hinweis: Wenn Sie lediglich eine Matrix aus Mehrfachauswahl-Fragen benötigen (Beispiel 2), können Sie statt einer kombinierten Frage auch eine Mehrfachauswahl-Matrix verwenden.
Bei kombinierten Fragen werden mehrere Fragen aus dem Fragenkatalog miteinander kombiniert: Der Titel und die Erklärung (oben) und die Texte der Items (unten links) stammen aus der ersten Frage. Auch die Eingabemöglichkeiten direkt hinter den Items entstammen der ersten Frage. Allerdings werden die Items der Frage in der Breite etwas gestaucht, sodass noch weitere Eingabemöglichkeiten daneben Platz finden (rechts unten). Diese stammen von anderen Fragen.
Die Anleitung geht zunächst auf das obere Beispiel mit 2 Fragen ein und anschließend auf das untere Beispiel, bestehende aus 3 Fragen.
Hinweis: Nicht alle Frage-Typen sind für kombinierte Fragen geeignet. Bei einer Dropdown-Auswahl zum Beispiel bekommt nicht jede Auswahloption (entsprechend einem Item) eine Zeile. Diese Frage kann deshalb nicht mit anderen Fragen kombiniert werden (Eingabefelder frei platzieren).
question()
, um die erste Frage anzuzeigen. Sie können die Frage auch einfach in den PHP-Code ziehen.question('AB01','combine=AB02'); // Kombiniert AB01 mit AB02
Alternativ können Sie die zu kombinieren Fragen auch als Array angeben. Dies ist beispielsweise sinnvoll, wenn die Liste der Fragen dynamisch variiert.
question(['AB01', 'AB02']); // Kombiniert AB01 mit AB02
Hinweis: Die Items der zweiten Frage werden so kombiniert, dass ihre Position (!) - nicht Kennung - mit der Position der Items der ersten Frage übereinstimmt. Wenn Sie also z.B. die Items 3, 4 und 5 der ersten Frage stellen, welche die Position 1, 2 und 4 haben, so werden in der zweiten Frage die Items mit Position 1, 2 und 4 gefragt - unabhängig davon, welche Kennung sie haben.
Es kann also durchaus sein, dass das Item AB01_03 zum Item AB02_01 gehört, wenn die Positionen der Items verändert wurden. Bitte beachten Sie dies bei der Auswertung der Ergebnisse. Ungewollte Verwirrungen vermeiden Sie, indem Sie die Positionen der Items nach dem Kopieren nicht mehr verändern. Die gewünschte Reihenfolge für die Ausgabe können Sie dann immer noch in der Funktion question()
festlegen.
Hinweis: Die Randomisierung der Item-Reihenfolge kann man ohne Probleme aktivieren. Allerdings zählt nur die Einstellung der ersten Frage – die Anordnung der anderen Fragen folgt stets der ersten Frage, damit keine Inkonsistenzen entstehen.
Hinweis: Fragen können in die Fragebogen-Seite gezogen oder mittels PHP-Code eingebunden werden. Das gleichzeitige Einbinden als Frage und im PHP-Code sorgt dafür, dass die Frage doppelt angezeigt wird und Sie entsprechende Fehlermeldungen erhalten.
Um mehrere Fragen zu kombinieren, gehen Sie genauso vor wie bei zwei Fragen. Allerdings verwenden Sie die Option combine einfach mehrfach für jede Frage, die angehängt werden soll. Die Beschriftung über den Spalten (im Beispiel: „a) besitze ich“ etc.) tragen Sie als Text über den Items direkt in der Frage ein.
PHP-Code
question( 'T201', 'combine=T202','combine=T203' );
Damit Sie bei einer Mehrfachauswahl (wie im Beispiel dargestellt) genügend Platz für die Beschriftungen erhalten, können Sie bei der Frage die Option Breite der Eingabe-Spalte angeben (im Beispiel: 80 Pixel) und die Eingabefelder zentriert ausrichten.
Die Eingabefelder der beiden Fragen werden automatisch mit einem Abstand von 16 Pixel ausgegeben. Mit der Option gap können Sie dieses Verhalten genauer festlegen. Die Einstellung gilt für die gesamte kombinierte Frage - unterschiedliche Lücken zwischen den einzelnen Teilfragen sind derzeit nicht möglich.
Die Beschriftungen der zweiten Frage werden normalerweise ausgeblendet. Falls Sie die Itemtexte anzeigen wollen, ergänzen Sie die Option combine_items.
Hinweis: Wenn bei einer Auswahl oder Mehrfachauswahl die Beschriftung auf der rechten Seite steht (Auswahlfelder links), dann werden sie unabhängig von der Einstellung bei combine_items immer angezeigt.
PHP-Code
// Kein Abstand zwischen den Eingabefeldern question('AB01','combine=AB02','gap=none'); question('AB01','combine=AB02','gap=0'); // Linie zwischen den Eingabefeldern question('AB01','combine=AB02','gap=line'); // 20 Pixel Abstand zwischen den Eingabefeldern // und Itemtexte nur vor der zweiten (!) Frage question( 'AB01','gap=20','combine_items=no' 'combine=AB02', 'combine_items=yes' );
Wenn man 2 Skalen kombiniert und eine „weiß nicht“ Kategorie anbieten möchte, will man i.d.R. nur ein solches Auswahlfeld pro Zeile anzeigen. Das Problem dabei: Die beiden Teilfragen sind voneinander unabhängig, so dass sich das „weiß nicht“ nur auf die Skala bezieht, bei der es aktiviert wurde.
Folgendes JavaScript kann man in die Seite einbetten. Es sorgt dafür, dass ein Klick auf „weiß nicht“ alle anderen Auswahlen in der Zeile entfernt. Das JavaScript ist darauf ausgelegt, dass genau eine der Skalen eine „weiß nicht“ Option anbietet.
question()
-Befehl folgenden show()
-Befehl ein.AB02
(zweimal) durch die Kennung jener Frage, welche die „weiß nicht“-Option trägt (entweder eine Skala mit Ausweichoption oder eine Frage vom Typ Mehrfachauswahl).JS01
durch die Kennung des HTML-Codes (Textes) den Sie soeben noch angelegt haben.question('AB01', 'combine=AB02'); show('JS01', ['%questionID%' => 'AB02']);
Wichtig: Im Datensatz wird für die ersten Fragen in diesem Fall nicht der Code -1 gespeichert, sondern ein fehlender Wert – denn die Auswahl wird so entfernt, als wäre sie nie gesetzt worden. Aktivieren Sie für die Teil-Fragen daher keine Antwort-Pflicht.
<script type="text/javascript"> <!-- function dkRow(dk) { var inputs = []; // Functions to control the clicks and changes var checker = function(evt) { var input = SoSciTools.getSender(evt, this); if (!input.checked) { return; } if (input == dk) { // Unselect all other inputs for (var i=0; i<inputs.length; i++) { if (inputs[i] == input) { // Ignorieren } else if (inputs[i].getAttribute("type") == "checkbox") { inputs[i].checked = false; } else if (inputs[i].getAttribute("type") == "radio") { inputs[i].checked = false; } else { inputs[i].value = ""; } } } else { // Unselect DK input dk.checked = false; } } // Find surrounding <tr> tag var node = SoSciTools.findContainer(dk, "tr"); if (node == null) { throw "No row for DK " + dk.getAttribute("id"); } // Find all inputs in the row and enable checker function var inputs2 = node.getElementsByTagName("input"); for (var i=0; i<inputs2.length; i++) { SoSciTools.attachEvent(inputs2[i], "click", checker); // Enlist all non-dk inputs if (inputs2[i] != dk) { inputs.push(inputs2[i]); } } } dkRow.registerQuestion = function(question) { // Find all DK inputs (-1) for the specified question // (check all possible items 1 to 99) var anyFound = false; for (var i=1; i<99; i++) { var item = i.toString(); // Care for two-digit ID if (item.length < 2) { item = "0" + item; } // First check for DK option of a scale var htmlID = question + "_" + item + "DK"; // e.g. AB01_01DK var dk = document.getElementById(htmlID); // Then check for multiple choice question if (!dk) { var htmlID = question + "_" + item; // e.g. AB01_01 var dk = document.getElementById(htmlID); } if (dk) { new dkRow(dk); anyFound = true; } } if (!anyFound) { throw "Not found DK or multiple choice options for " + question; } } dkRow.registerQuestion('%questionID%'); // --> </script>
Wenn man den Text zwischen den Eingabefeldern platzieren möchte, kann man mit dem Parameter combine_items
festlegen, in welcher „Spalte“ die Labels angezeigt werden sollen. Im folgenden Beispiel werden sie für die erste Teilfrage (wo sie üblicherweise aktiv sind) abgeschaltet 'combine_items=no'
und für die zweite Teilfrage (wo sie üblicherweise nicht angezeigt werden) aktiviert mittels 'combine_items=yes'
.
Wenn die beiden Skalen-Fragen die Kennungen „SK01“ und „SK02“ haben, lässt sich die obige Darstellung mit folgendem PHP-Code erreichen.
question('SK01', 'combine_items=no', 'combine=SK02', 'combine_items=yes'); pageCSS(' table#SK01_tab td.s2col3 { text-align: center; } ');
Hinweis: Der question()
-Befehl zählt die combine_items
-Parameter einfach ab, es zählt nur deren Reihenfolge, nicht aber, an welcher Stelle sie im Befehl stehen.
Tipp: Alternativ zum combine_items
-Parameter könnte man auch die Darstellugn der ersten Frage so variieren, dass die Eingabefelder links und die Beschriftungen rechts angezeigt werden. Dies wird in der Anleitung Best-Worst (MaxDiff) beschrieben.
Der zweite Teil mit pageCSS()
sorgt dafür, dass die Itemtexte zentriert angezeigt werden. Das vorangestellte table#SK01_tab
stellt sicher, dass die CSS-Anweisung nur für die kombinierte Frage SK01/02 gilt. Die Kennung muss natürlich an die Kennung der Frage angepasst werden. Wenn Sie sonst keine Fragen auf der Seite haben, können Sie dieses Präfix auch weglassen.
Dropdown-Fragen lassen sich mithilfe von Tabellen nebeneinander platzieren und somit kombiniert abfragen (siehe dazu auch das Kapitel Elemente nebeneinander platzieren).
Eine Schritt-für-Schritt-Beschreibung zum folgenden Beispiel lesen Sie unter Dropdowns nebeneinander platzieren.
Ein relevanter Anteil der Befragten füllt den Fragebögen nicht am PC, sondern auf dem Smartphone aus. Die meisten Fragen in SoSci Survey schalten dann in einen anderen Darstellungsmodus. Deshalb reicht es in aller Regeln, den Fragebogen gegen Ende der Implementierung einmal auf dem Mobilgerät zu testen. Mehr dazu in der Anleitung Fragebögen für Smartphones.
Der Befehl show()
ermöglicht eine responsive Darstellung auch für kombinierte Fragen. Allerdings ist diese Funktion noch in der Testphase. Prüfen Sie daher, ob die Darstellung mit show()
für Ihre Frage gut funktioniert – und wenn nicht, sagen Sie bitte im Online-Support bescheid.
Die Funktion show()
erwartet die Fragen immer als Array. Eine Trennlinie muss als Parameter in einem zweiten Array festgelegt werden.
show( ['AB01', 'AB02'], ['gap' => 'line'] );
Kombinierte Fragen mittels question()
passen das Layout nicht automatisch an die Größe des Bildschirms an (responsive design) - und können deshalb auf Mobilgeräten unter Umständen nicht ausgefüllt werden. Hier bietet es sich an, für Mobilgeräte eine alternative Darstellung anzubieten.
Legen Sie als erstes eine Frage vom Typ „Gerät und übermittelte Variablen“ an. In der Frage im Karteireiter Gerät setzen Sie ein Kreuzchen bei Bildschirmgröße. Nach dem Speichern erhalten Sie zwei Variablen für die Breite und Höhe des Bildschirms in Pixeln. Notieren Sie die Variablen-Kennung für die Bildschirmbreite, welche Sie im Karteireiter Variablen finden. Im folgenden Beispiel wird angenommen, dass die Variable die Kennung „GR01_ScW“ hat.
Diese Frage platzieren Sie nun auf einer Seite im Fragebogen, die vor der kombinierten Frage kommt. Die Bildschirmbreite wird nämlich (anders als das Format, welches aber auf Apple-Geräten oftmals nicht korrekt erkannt wird) erst beim Klick auf „Weiter“ gespeichert.
Nun können Sie mit ein paar Zeilen PHP-Code entweder die kombinierte Frage anzeigen oder die beiden Fragen untereinander (und mit Optimierungen für Mobilgeräte) darstellen. Als Grenze wird hier eine Breite von 600 Pixeln gewählt. Je nach Fragetypen und Layout kann die Wahl einer größeren oder kleineren Zahl sinnvoll sein.
if (value('GR01_ScW') > 600) { // Kombinierte Frage question('AB01','combine=AB02'); } else { // Einzelne Fragen question('AB01'); question('AB02'); }
Zur Erklärung des Codes lesen Sie sei auf die Anleitung Filterfragen (PHP-Filter) verwiesen.