Hallo,
wir haben in einem komplexen Experiment ein etwas größeres Problem.
Wir laden auf Seite 1 einen Array mit fünf Stimulus Materialien $blocks und legen die Variable $pid = 0; an. Beide werden mit registervariable() global gemacht.
if (!isset($blocks)) {
$blocks = array( // Liste der Frage-Kennungen und zugehöriger Bilder
array('Box5_alternierend.png', 'FV32', 'FV17', 'FV25', 'DV42', 'DV13', 'DV37', 'DV52', 'DV32', 'CO07'),
array('Box5_top.png', 'FV33', 'FV12', 'FV26', 'DV43', 'DV14', 'DV38', 'DV53', 'DV33', 'CO08'),
array('Box5_bottom.png', 'FV34', 'FV16', 'FV27', 'DV44', 'DV15', 'DV39', 'DV54', 'DV34', 'CO09'),
array('Box9_top.png', 'FV35', 'FV13', 'FV28', 'DV45', 'DV16', 'DV40', 'DV55', 'DV35', 'CO10'),
array('Box9_alternierend.png', 'FV36', 'FV14', 'FV29', 'DV46', 'DV17', 'DV41', 'DV56', 'DV36', 'CO11')
);
// Die Liste mischen
shuffle($blocks);
// Die Listen auf allen Seiten verfügbar machen
registerVariable('blocks');
$bid=0; // wird als laufende Nummer für die erste Dimension des array blocks verwendet. Wird auf jeder Box Seite am Ende um 1 erhöht.
registerVariable($bid);
Auf den Seite 7,9,11,13,15 wird jeweils einer der Stimuli angezeigt. Der code ist identisch:
//code für PP => Kein GewinnspielText, daher für Preismech > 2 Textfeld, sonst nichts
if ($price_mechanism > 2) {
text('lottery_01');
}
//Schieberegler 0-20 für GBWYW, 0-50 für alle anderen
if ($price_mechanism > 6) {
text('schieberegler_code_0_20'); // Regler 0-20 bei GBWYW
}
if ($price_mechanism < 6) {
text('schieberegler_code_0_50'); // Regler 0-50 bei PWYW
}
html('<p><img src="'.$blocks[$bid][0].'"></p>');
//html('<p>'.$price_mechanism.'</p>');
html('<p>'.$bid.'</p>');
//angehängte Frage
question($blocks[$bid][3]);
//Fragen für Preismechanismen
if ($price_mechanism == 1 || $price_mechanism == 2) {
question($blocks[$bid][4]);
replace('%hier ersetzen%', 'Wert');
question($blocks[$bid][9]);
}
elseif ($price_mechanism == 3 || $price_mechanism == 4) {
question($blocks[$bid][5]);
question($blocks[$bid][4]);
}
elseif ($price_mechanism == 5 || $price_mechanism == 6) {
question($blocks[$bid][6]);
replace('%hier ersetzen%', 'Preis');
question($blocks[$bid][9]);
}
elseif ($price_mechanism > 6) {
question($blocks[$bid][7]);
question($blocks[$bid][8]);
replace('%hier ersetzen%', 'Geld-zurück Betrag');
question($blocks[$bid][9]);
}
if ($price_mechanism > 6) {
html('
<script type="text/javascript">
<!--
var optionA = document.getElementById("'.$blocks[$bid][7].'_01a"); // JN01_01a ist die HTML-ID der Auswahloption "Ja"
var optionB = document.getElementById("'.$blocks[$bid][7].'_02a"); // Option "Nein"
var frage1 = document.getElementById("'.$blocks[$bid][8].'_qst"); // HTML-ID der Texteingabe
var frage2 = document.getElementById("'.$blocks[$bid][9].'_qst"); // HTML-ID der Texteingabe
function toogle() {
// Die zwei Pipes (||) sind ein logisches "Oder"
// Die Bedingung prüft also: Ist Option A ausgewählt oder ist B ausgewählt?
if ((optionA.checked)) {
// Wurde "Ja" oder "Vielleicht" ausgewählt, dann wird die Frage angezeigt
// Keine Angabe ("") verwendet die Standard-Einstellung (normal anzeigen)
frage1.style.display = "";
frage2.style.display = "";
} else {
// Mit der Anzeigeoption "none" wird die Frage ausgeblendet
frage1.style.display = "none";
frage2.style.display = "none";
//frage1.style.display = "height: 1px; overflow: hidden;";
//frage2.style.display = "height: 1px; overflow: hidden;";
}
}
// Die Funktion soll jedesmal ausgeführt werden, wenn eine der drei Optionen angeklickt wird
SoSciTools.attachEvent(optionA, "click", toogle);
SoSciTools.attachEvent(optionB, "click", toogle);
// Und jetzt gleich soll sie auch ausgeführt werden, damit die Anzeige zu Beginn korrekt ist
// (z.B. ausblenden der Texteingabe zu Beginn)
toogle();
// -->
</script>
');
}
Dazwischen sind jeweils Seiten die Abprüfen ob abhängig von der Experimentalgruppe alle Eingaben vorhanden sind (Code ebenfalls identisch auf Seite 8,10,12,14,16.
html('Inhalt 7:<br>'.$blocks[$bid][7].'<br>');
html('Inhalt 7:<br>'.value($blocks[$bid][7]).'<br>');
html('Inhalt 8:<br>'.$blocks[$bid][8].'<br>');
html('Inhalt 8:<br>'.value($blocks[$bid][8].'_01').'_01<br>');
html('Inhalt 9:<br>'.$blocks[$bid][9].'<br>');
html('Inhalt 9:<br>'.value($blocks[$bid][9].'_01').'<br>');
$miss1 = getItems($blocks[$bid][8], 'missing');
$miss2 = getItems($blocks[$bid][9], 'missing');
debug($miss1);
debug($miss2);
if ($price_mechanism > 6 and value($blocks[$bid][7]) == 1)
{
//html('geht<br>');
$miss1 = getItems($blocks[$bid][8], 'missing');
$miss2 = getItems($blocks[$bid][9], 'missing');
//$miss1 = getItems($blocks[$bid][8].'_01', 'missing');
//$miss2 = getItems($blocks[$bid][9].'_01', 'missing');
// Fehler und zurück, falls nicht alle oder keines beantwortet wurden
if (count($miss1) != 0 && count($miss2) != 0) {
//html('geht nicht 1');
markFail($blocks[$bid][8]);
markFail($blocks[$bid][9].'_01');
repeatPage('warning_answer_all');
}
elseif (count($miss1) != 0) {
markFail($blocks[$bid][8]);
repeatPage('warning_answer_all');
}
elseif (count($miss2) != 0) {
markFail($blocks[$bid][9].'_01');
repeatPage('warning_answer_all');
}
elseif (($price_mechanism == 9 || $price_mechanism == 10) && value($blocks[$bid][7]) == 1)
{
if (value($blocks[$bid][8]) <= $gbwyw_threshold) {
text('gbwyw_threshold_success');
$bid=1;
}
elseif (value($blocks[$bid][8]) > $gbwyw_threshold) {
text('gbwyw_threshold_fail');
$bid=1;
}
} // GBWYW + Thresgold Abfrage Klammer zu }
else {
// html('<p>it\'s'.$bid.'</p>');
$bid=1;
// html('<br><p>me'.$bid.'</p>');
goToPage('next');
}
}//
else {
//html('<p>it\'s'.$bid.'</p>');
$bid=1;
//html('<br><p>me'.$bid.'</p>');
goToPage('next');
}
Das Problem ist nun, dass wenn auf der Seite von Stimulus 3 ein Fehler in Gruppe 7 auftritt, er zurück zu der Seite von Stimulus 1 springt. Bei Stimulus 1 und 2 geht springt der code beim Fehler richtigerweise zur vorherigen Frage zurück. Ich kann mir das nicht erklären. Irgendwelche Ideen?