0 votes
in SoSci Survey (dt.) by s123746 (155 points)

Ich habe ein Textfeld und vier Fragen nebeneinander pro Seite (davon mehrere Seiten aufeinanderfolgend). Die Fragen sind unterschiedliche Variablen mit gleichem Wortlaut (Concept 1-4), nur der Text im Textfeld (jeweiliges Item) verändert sich.

Ich würde gerne einrichten, dass die Reihenfolge dieser vier Fragen (diese Seite: D101-D104) auf den einzelnen Seiten zufällig erscheint - allerdings nur pro Person, die den Fragebogen ausfüllt. D. h. die vier Fragen sollen innerhalb der Beantwortung immer in der gleichen Reihenfolge auftreten, aber für unterschiedliche Teilnehmende in zufällig unterschiedlicher Reihenfolge.

Ich freue mich über Hilfe, wie ich das umsetzen kann. Vielen Dank!

Die Seite pro Frage sieht bisher in PHP- bzw. HTML-Code so aus:
(Instruktionstext)

    pageCSS('
    tr:first-child th {
        border-bottom: 2px solid black;
    }
');
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="table-layout:fixed; width: 100%;">
<colgroup>
    <col width="20%">
    <col width="20%">
    <col width="20%">
    <col width="20%">
    <col width="20%">
  </colgroup>
<tr>
    <th>Item</th>
    <th>Concept 1</th>
    <th>Concept 2</th>
    <th>Concept 3</th>
    <th>Concept 4</th>
  </tr>
    <td>

(Text für "Item", pro Seite unterschiedlich)

    </td>
        <td>
    
    question('D101','show-title=yes', 'show-explanation=no', 'spacing=0');

</td>
    <td>

question('D102','show-title=yes', 'show-explanation=no', 'spacing=0');

    </td>
        <td>
    
    question('D103','show-title=yes', 'show-explanation=no', 'spacing=0');

</td>
    <td>

question('D104','show-title=yes', 'show-explanation=no', 'spacing=0');

</td>
  </tr>
</table>

dann folgt noch:

<script type="text/javascript">
<!--
SoSciTools.attachEvent(window, "load", function(evt) {

    SoSciTools.submitButtonsHide();
});

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

SoSciTools.attachEvent(window, "load", function(evt) {

    var dropdowns = document.querySelectorAll('select[id^="D102"], select[id^="D103"], select[id^="D104"], select[id^="D101"]');


    dropdowns.forEach(function(dropdown) {
        SoSciTools.attachEvent(dropdown, "change", function() {

            var allDropdownsAnswered = true;
            dropdowns.forEach(function(otherDropdown) {
                if (otherDropdown !== dropdown && otherDropdown.selectedIndex === 0) {
                    allDropdownsAnswered = false;
                }
            });

            if (allDropdownsAnswered) {
                SoSciTools.submitPage();
            }
        });
    });
});
// -->
</script>
by s109993 (12.0k points)
Haben Sie sich dieser Kapitel dazu angeschaut? Hier wird relativ gut beschrieben, wie sie Seiten zufällig rotieren könne: https://www.soscisurvey.de/help/doku.php/de:create:rotation-pages?s[]=%2Azuf%C3%A4llige%2A&s[]=%2Aseiten%2A

1 Answer

0 votes
by SoSci Survey (327k points)
edited by SoSci Survey

Möchten Sie nur die Fragen rotieren, oder auch die Titel, die darüber stehen ("Concept 1" u.s.w.) zusammen mit den Fragen?

Ich würde empfehlen, dass Sie (pro Seite) einen Zufallsgenerator mit den 4 Kennungen anlegen, und daraus auch jeweils 4 Codes ziehen.

Auf Basis dieser Ziehung können Sie dann die question()-Befehle anpassen. Das könnte so aussehen.

$fragen = array_values(valueList('RG01', NULL, 'label'));  //bearbeitet

Und aus

 question('D101','show-title=yes', 'show-explanation=no', 'spacing=0');

würde dann

question($fragen[0], 'show-title=yes', 'show-explanation=no', 'spacing=0');
by SoSci Survey (327k points)
> Allerdings werden damit die vier Fragen auf jeder Seite in einer neuen zufälligen Reihenfolge präsentiert.

Es sind jedesmal neue Fragen, korrekt? Dann müssten Sie auf der Seite zusätzlich in einem Array definieren, die die Kennungen jeweils sind, z.B.

$fragen = [
  1 => 'AB01',
  2 => 'AB02',
  3 => 'AB03',
  4 => 'AB04'
];
$order = array_values(valueList('RG01'));  // absichtlich ohne "label"
$sortiert = [];
foreach ($order as $i) {
    $sortiert[] = $fragen[$i];
}

Und dann im weiteren Code $sortiert statt $fragen verwenden.
by s123746 (155 points)
Dankeschön. Genau, es sind auf jeder Seite neue Fragen.

Ich habe jetzt den PHP-Code:

$fragen = [
  1 => 'D101',
  2 => 'D102',
  3 => 'D103',
  4 => 'D104'
];
$order = array_values(valueList('R003'));  // absichtlich ohne "label"
$sortiert = [];
foreach ($order as $i) {
    $sortiert[] = $fragen[$i];
}

direkt unter dem Zufallsgenerator, dann den Text für die Instruktion und den Code für die Tabelle. Und im Tabellen-Code dann

$sortiert = array_values(valueList('R003', NULL, 'label'));
question($sortiert[0], 'show-title=yes', 'show-explanation=no', 'spacing=0');

von [0] bis [3] für die vier Fragen.
Die Reihenfolge ändert sich leider immer noch auf den unterschiedlichen Seiten.

Oder erstelle ich dann nur einen Zufallsgenerator auf der ersten Seite und verweise auf den (also R003) dann auch auf den folgenden Seiten, z. B. dann auf der nächsten Seite:

$fragen = [
  1 => 'D201',
  2 => 'D202',
  3 => 'D203',
  4 => 'D204'
];
$order = array_values(valueList('R003'));  // absichtlich ohne "label"
$sortiert = [];
foreach ($order as $i) {
    $sortiert[] = $fragen[$i];
}
by SoSci Survey (327k points)
> $sortiert = array_values(valueList('R003', NULL, 'label'));

Diese Zeile muss noch raus - Sie haben $sortiert ja schon im vorigen Teil definiert.

Wenn Sie es nicht ständig neu definieren möchten, dann ergänzen Sie im ersten Block noch ein

....
foreach ($order as $i) {
    $sortiert[] = $fragen[$i];
}
// Ergänzung
registerVariable($sortiert);
by s123746 (155 points)
Großartig, vielen Dank, jetzt klappt alles!

Wie kann ich noch eine Variable erstellen, um die Art der Reihenfolge, die den Teilnehmenden angezeigt wurde, zu speichern (um diese später vergleichen zu können)?
by SoSci Survey (327k points)
Im Prinzip haben Sie die Reihenfolge schon in R003x01 bis R003x04 ... je nachdem, wie Sie das auswerten möchten, können Sie aber z.B. noch die Rangordnung speichern, vgl. https://www.soscisurvey.de/help/doku.php/de:create:functions:put#randomisierung_i

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

...