Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
de:create:combine [11.04.2014 11:03] – [Schritt für Schritt] stefanie.herber | de:create:combine [28.03.2023 09:36] – [Kombinierte Fragen] admin | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
Sie haben die Möglichkeit, | Sie haben die Möglichkeit, | ||
+ | |||
+ | **Hinweis: | ||
**Beispiel 1**\\ | **Beispiel 1**\\ | ||
Zeile 9: | Zeile 11: | ||
{{: | {{: | ||
- | Bevor Sie eine kombinierte Frage bauen, | + | Bevor Sie eine kombinierte Frage bauen, |
+ | |||
+ | 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 '' | ||
+ | |||
+ | **Hinweis: | ||
===== Funktion ===== | ===== Funktion ===== | ||
Zeile 24: | Zeile 30: | ||
- Erstellen Sie zunächst den linken Teil der Frage: Als Fragetyp wählen Sie jenen Typ, den die Eingabe links zeigen soll (im Beispiel 1 wäre das eine 5er-Skala). | - Erstellen Sie zunächst den linken Teil der Frage: Als Fragetyp wählen Sie jenen Typ, den die Eingabe links zeigen soll (im Beispiel 1 wäre das eine 5er-Skala). | ||
- | - Erstellen Sie alle Items bzw. Auswahloptionen für die (ersten) Frage. | + | - Erstellen Sie alle Items bzw. Auswahloptionen für die (erste) Frage. |
- Erstellen Sie eine Kopie dieser Frage (ganz oben //Frage duplizieren// | - Erstellen Sie eine Kopie dieser Frage (ganz oben //Frage duplizieren// | ||
- Im Fragenkatalog taucht die Frage nun zweimal auf -- einmal das Original, einmal die Kopie. Die beiden Fragen sind zwar gleich, haben aber verschiedene Kennungen. | - Im Fragenkatalog taucht die Frage nun zweimal auf -- einmal das Original, einmal die Kopie. Die beiden Fragen sind zwar gleich, haben aber verschiedene Kennungen. | ||
- | - Die Kopie -- die " | + | - Die Kopie -- die " |
- Ändern Sie ggf. Fragetyp und Beschriftungen der zweiten Frage so, wie Sie es für die Eingabefelder rechts wünschen (im obigen Beispiel 1 eine 3er-Skala mit anderen Beschriftungen und ohne grafische Verankerung). | - Ändern Sie ggf. Fragetyp und Beschriftungen der zweiten Frage so, wie Sie es für die Eingabefelder rechts wünschen (im obigen Beispiel 1 eine 3er-Skala mit anderen Beschriftungen und ohne grafische Verankerung). | ||
- Öffnen Sie nun unter **Fragebogen zusammenstellen** den Fragebogen, in dem die kombinierte Frage erscheinen soll. | - Öffnen Sie nun unter **Fragebogen zusammenstellen** den Fragebogen, in dem die kombinierte Frage erscheinen soll. | ||
Zeile 35: | Zeile 41: | ||
<code php> | <code php> | ||
question(' | question(' | ||
+ | </ | ||
+ | |||
+ | __Alternativ__ können Sie die zu kombinieren Fragen auch als Array angeben. Dies ist beispielsweise sinnvoll, wenn die Liste der Fragen dynamisch variiert. | ||
+ | |||
+ | <code php> | ||
+ | question([' | ||
</ | </ | ||
**Hinweis: | **Hinweis: | ||
- | 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 '' | + | 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 '' |
**Hinweis: | **Hinweis: | ||
Zeile 54: | Zeile 66: | ||
<code php> | <code php> | ||
question( | question( | ||
- | ' | + | ' |
); | ); | ||
</ | </ | ||
Zeile 93: | Zeile 105: | ||
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, | 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, | ||
- | Folgendes JavaScript kann man als // | + | 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" |
+ | |||
+ | - Legen Sie in einer Rubrik Ihrer Wahl mit **Text hinzufügen** einen neuen Textbaustein an | ||
+ | | ||
+ | - // | ||
+ | - //Inhalt:// JavaScript-Code weiter unten | ||
+ | - Speichern {{: | ||
+ | - Tragen Sie im PHP-Code unter dem '' | ||
+ | - Ersetzen Sie die Kennung '' | ||
+ | - Ersetzen Sie die Kennung '' | ||
+ | |||
+ | |||
+ | <code php> | ||
+ | question(' | ||
+ | show(' | ||
+ | </ | ||
**Wichtig: | **Wichtig: | ||
<code javascript> | <code javascript> | ||
- | <script src=" | ||
<script type=" | <script type=" | ||
<!-- | <!-- | ||
function dkRow(dk) { | function dkRow(dk) { | ||
- | var inputs = new Array(); | + | var inputs = []; |
- | + | ||
// Functions to control the clicks and changes | // Functions to control the clicks and changes | ||
var checker = function(evt) { | var checker = function(evt) { | ||
- | var input = oFbGeneral.getSender(evt, | + | var input = SoSciTools.getSender(evt, |
if (!input.checked) { | if (!input.checked) { | ||
return; | return; | ||
Zeile 128: | Zeile 154: | ||
} | } | ||
} | } | ||
+ | |||
// Find surrounding <tr> tag | // Find surrounding <tr> tag | ||
- | var node = dk.parentNode; | + | var node = SoSciTools.findContainer(dk, "tr"); |
- | while ((node.nodeType != 1) || (node.tagName != "TR")) { | + | if (node == null) { |
- | node = node.parentNode; | + | throw "No row for DK " + dk.getAttribute(" |
- | | + | |
- | return; | + | |
- | } | + | |
} | } | ||
+ | |||
// Find all inputs in the row and enable checker function | // Find all inputs in the row and enable checker function | ||
- | inputs2 = node.getElementsByTagName(" | + | |
for (var i=0; i< | for (var i=0; i< | ||
- | | + | |
// Enlist all non-dk inputs | // Enlist all non-dk inputs | ||
if (inputs2[i] != dk) { | if (inputs2[i] != dk) { | ||
Zeile 148: | Zeile 171: | ||
} | } | ||
} | } | ||
+ | |||
dkRow.registerQuestion = function(question) { | dkRow.registerQuestion = function(question) { | ||
// Find all DK inputs (-1) for the specified question | // Find all DK inputs (-1) for the specified question | ||
// (check all possible items 1 to 99) | // (check all possible items 1 to 99) | ||
+ | var anyFound = false; | ||
for (var i=1; i<99; i++) { | for (var i=1; i<99; i++) { | ||
var item = i.toString(); | var item = i.toString(); | ||
Zeile 157: | Zeile 182: | ||
item = " | item = " | ||
} | } | ||
- | var htmlID = question + " | + | |
+ | | ||
var dk = document.getElementById(htmlID); | var dk = document.getElementById(htmlID); | ||
+ | // Then check for multiple choice question | ||
+ | if (!dk) { | ||
+ | var htmlID = question + " | ||
+ | var dk = document.getElementById(htmlID); | ||
+ | } | ||
if (dk) { | if (dk) { | ||
new dkRow(dk); | new dkRow(dk); | ||
+ | anyFound = true; | ||
} | } | ||
+ | } | ||
+ | if (!anyFound) { | ||
+ | throw "Not found DK or multiple choice options for " + question; | ||
} | } | ||
} | } | ||
- | + | ||
- | + | dkRow.registerQuestion(' | |
- | dkRow.registerQuestion(' | + | |
// --> | // --> | ||
</ | </ | ||
</ | </ | ||
- | ===== Kombination mehrerer Dropdown-Fragen ===== | ||
- | Dropdown-Fragen lassen sich auch mithilfe von Tabellen nebeneinander platzieren und somit kombiniert abfragen (siehe dazu auch das Kapitel [[table-layout|Elemente nebeneinander platzieren]]). | + | ===== Text in der Mitte ===== |
- | **Beispiel**\\ | + | Wenn man den Text zwischen den Eingabefeldern platzieren möchte, kann man mit dem Parameter '' |
- | Beispielsweise will man im Fragebogen einen Zeitraum (Monat/ | + | {{: |
- | {{ : | + | Wenn die beiden Skalen-Fragen die Kennungen |
- | Diese Frage lässt sich durch die Kombination vierer Dropdown-Fragen | + | |
+ | <code php> | ||
+ | question(' | ||
- | ===== Schritt für Schritt ===== | + | pageCSS(' |
+ | table# | ||
+ | text-align: center; | ||
+ | } | ||
+ | '); | ||
+ | </ | ||
+ | **Hinweis: | ||
- | - Legen Sie eine Dropdown-Frage mit den Monaten von Januar bis Dezember an (im Beispiel ST17) und duplizieren Sie diese (Frage ST19). Damit haben Sie eine Frage für die Monatsauswahl des Anfangs- und des Enddatums erzeugt. Ebenso verfahren Sie mit Fragen ST18 und ST20, die dann das Anfangsjahr bzw. das Endjahr in der kombinierten Frage bilden. | + | **Tipp:** Alternativ zum '' |
- | - Legen Sie die Antwortoption "bis heute" als eine Frage vom Typ Mehrfachauswahl an. | + | |
- | - Erstellen Sie unter **Fragebogen zusammenstellen** mithilfe von HTML- und PHP-Boxen, die Sie von rechts in den Fragebogen ziehen können, eine Tabelle mit fünf Feldern in einer Zeile (siehe auch [[table-layout|Elemente nebeneinander platzieren]]) und positionieren Sie in jede Zelle mithilfe einer PHP-Box die jeweilige Frage: | + | |
- | **Erstellen | + | Der zweite Teil mit '' |
+ | ===== Kombination mehrerer Dropdown-Fragen ===== | ||
- | Erstellen Sie den Titel der Frage sowie das Tabellen-Gerüst: | + | Dropdown-Fragen lassen sich mithilfe von Tabellen |
- | <code html>< | + | Eine Schritt-für-Schritt-Beschreibung zum folgenden Beispiel lesen Sie unter [[table-layout-dropdowns|Dropdowns nebeneinander platzieren]]. |
- | < | + | |
- | <table width=" | + | |
- | < | + | |
- | <col width=" | + | |
- | <col width=" | + | |
- | <col width=" | + | |
- | <col width=" | + | |
- | <col width=" | + | |
- | </ | + | |
- | < | + | |
- | < | + | |
- | + | ||
- | **Erste Frage in erste Zelle einfügen** | + | |
- | Fügen Sie die erste Dropdown-Box aus der Frage nach dem Monat des Arbeitsbeginns ein. Mit den Optionen in der Klammer unterdrücken Sie Fragetext und -erläuterung in Frage ST17. Diese wird nicht benötigt, da die kombinierte Frage als ganzes den Fragetitel "Bitte geben Sie an, wie lange Sie in diesem Unternehmen gearbeitet haben." erhält. | + | {{ : |
- | <code php> | ||
- | question(' | ||
- | </ | ||
- | | ||
- | **Tabelle fortsetzen und Fragen einfügen** | ||
- | <code html> | + | ===== Mobilgeräte und responsive Darstellung ===== |
- | </ | + | |
- | < | + | |
- | </ | + | |
- | Frage nach dem Anfangsjahr | + | Ein relevanter Anteil der Befragten füllt den Fragebögen nicht am PC, sondern auf dem Smartphone aus. Die meisten Fragen |
- | <code php> | + | ==== Lösungsansatz 1 ==== |
- | question(' | + | |
- | </ | + | |
- | <code html> | + | Der Befehl '' |
- | </ | + | |
- | < | + | |
- | </ | + | |
- | Frage nach dem Endmonat: | + | Die Funktion '' |
<code php> | <code php> | ||
- | question('ST19',' | + | show( |
+ | ['AB01', 'AB02'], | ||
+ | ['gap' => 'line'] | ||
+ | ); | ||
</ | </ | ||
- | <code html> | ||
- | </td> | ||
- | <td> | ||
- | </ | ||
+ | ==== Lösungsansatz 2 ==== | ||
- | <code php> | + | Kombinierte Fragen mittels '' |
- | question(' | + | |
- | </ | + | |
- | <code html> | + | Legen Sie als erstes eine Frage vom Typ " |
- | </td> | + | |
- | < | + | |
- | </code> | + | |
- | Einfügen | + | Diese Frage platzieren Sie nun auf einer Seite im Fragebogen, die vor der kombinierten Frage kommt. Die Bildschirmbreite wird nämlich |
+ | Nun können Sie mit ein paar Zeilen [[: | ||
<code php> | <code php> | ||
- | question('ST21',' | + | if (value('GR01_ScW') > 600) { |
- | </code> | + | // Kombinierte Frage |
- | + | | |
- | **Ende der Tabelle** | + | } else { |
- | + | // Einzelne Fragen | |
- | <code html> | + | question(' |
- | </td> | + | |
- | </tr> | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | **Alternativwahl "bis heute" | + | |
- | + | ||
- | Fügen Sie ganz ans Ende dieser Fragebogenseite folgendes JavaScript-Fragment als HTML-Baustein ein: | + | |
- | + | ||
- | <code html> | + | |
- | <script src=" | + | |
- | <script type=" | + | |
- | <!-- | + | |
- | var tillToday = document.getElementById(" | + | |
- | function checkAlternative() { | + | |
- | | + | |
- | document.getElementById(" | + | |
- | document.getElementById(" | + | |
- | } else { | + | |
- | | + | |
- | | + | |
- | } | + | |
} | } | ||
- | oFbGeneral.attachEvent(tillToday, | ||
- | // --> | ||
- | </ | ||
</ | </ | ||
- | Dieser Baustein sorgt dafür, dass ST19 und ST20 grau schattiert werden, wenn die Auswahlbox ST21 markiert wird, also nicht gleichzeitig "bis heute" und ein Enddatum angegeben werden kann. | + | Zur Erklärung des Codes lesen Sie sei auf die Anleitung [[: |
- | ** Überprüfung der Eingabe ** | ||
- | Wenn Sie einen zusätzlichen Konsistenzcheck einbauen wollen, um zu überprüfen, | ||
- | |||
- | Wenn Sie die Fragen analog zum Beispiel angelegt haben, steht dort beispielsweise Folgendes: | ||
- | |||
- | * Für [ST17] und [ST19] jeweils: \\ 1 = Januar \\ 2 = Februar \\ ... \\ 12 = Dezember \\ -9 = nicht beantwortet | ||
- | |||
- | * Jahre: Für [ST18] und [ST20] jeweils: \\ 1 = 2014 \\ 2 = 2013 \\ 3 = 2012 \\ ... \\ 35 = 1980 \\ -9 = nicht beantwortet | ||
- | |||
- | * Auswahl: Für [ST21]: \\ 1 = nicht gewählt \\ 2 = gewählt | ||
- | |||
- | Durch einen Filter lässt sich sicherstellen, | ||
- | Um der Teilnehmerin bzw. dem Teilnehmer in diesen Fällen einen Fehlertext und die kombinierte Frage erneut anzuzeigen, erstellen Sie zunächst einen Textbausteil im Menü **Textbausteine u. Beschriftung**, | ||
- | |||
- | <code php> | ||
- | //Jahr des Eintritts liegt nach dem Jahr des Austritts | ||
- | if ((value(' | ||
- | text(' | ||
- | repeatPage(); | ||
- | } | ||
- | |||
- | //im gleichen Jahr, aber untersch. Monate | ||
- | if (((value(' | ||
- | text(' | ||
- | repeatPage(); | ||
- | } | ||
- | |||
- | // Optional: TN hat keine Eingabe getroffen | ||
- | if ((value(' | ||
- | text(' | ||
- | repeatPage(); | ||
- | } | ||
- | |||
- | </ | ||
- | |