Hallo,
ich versuche, eine Lesestudie mit Experience Sampling zu implementieren. Die VP lesen in dieser Studie einen auf mehrere Seiten aufgeteilten Text. Zusätzlich werden die VP während des Lesens im Abstand von 2-3 Minuten durch eine Gedankenprobe (thought probe) unterbrochen, die nach bestimmten Charakteristika der Gedanken der VP während des Lesens fragt.
Dafür würde ich gerne eine Multilevelstruktur plus Timer benutzen. Der Ablauf soll grob wie folgt sein:
1) Initialisiere einen Timer.
2) Ist der Timer abgelaufen, springe in einen untergeordneten Fragebogen.
3) Ist die VP mit dem untergeordneten Fragebogen fertig, dann springe zurück auf die Seite, bei der die VP beim Lesen unterbrochen wurde und initialisiere einen neuen Timer.
Ich habe mich beim Timer an den JS-Beispielen auf der Homepage orientiert und das funktioniert auch, d.h. nach Timer-Ablauf passiert etwas (der Alert wird angezeigt). Nur finden die Sprünge nicht so statt, wie gewünscht. Hier ist mein Minimalbeispiel.
PREP (dient nur zum Registrieren der Variablen)
$timeout = -999;
registerVariable($timeout);
$lastpage = "";
registerVariable($lastpage);
goToPage('BACK');
DOWN (dient nur zum Springen in den untergeordneten Fragebogen)
multiLevelDown('LES-PRB');
BACK (dient zum Rücksprung auf die letzte Seite und der Neuinitialisierung des Timers)
// randomInterval() verwendet mt_rand()
$timeout = strtotime('+'.randomInterval().' seconds');
goToPage($lastpage);
Seite A (B und C sind bis auf den Inhalt von $lastpage identisch)
// Auf welcher Seite bin ich?
$lastpage = 'Seite A';
// Wenn Timer abgelaufen, springe zu Seite DOWN
if(time() >= $timeout){
goToPage('DOWN');
}
// Zeig dem User an, auf welcher Seite du bist
html(''.$lastpage);
// Zeige Textelement mit JS-Code an (wie im Beispiel "Timer")
show('L124', array('%timeleft%' => ($timeout - time())));
Das Textelement für den Timer ist wie folgt:
<script type="text/javascript">
// Verbleibende Zeit initialisieren
var timeLeft = %timeleft%;
var timeStart = new Date();
function updateCountdown() {
// Zeit berechnen
var now = new Date();
var timePage = Math.floor((now.getTime() - timeStart.getTime()) / 1000); // Vergangene Zeit [Sek.]
var remain = timeLeft - timePage;
// Zeit abgelaufen?
if (remain <= 0) {
remain = 0;
// Timer stoppen
window.clearInterval(timerInterval);
SoSciTools.submitPage();
}
}
// Initialisierung
var timerInterval = window.setInterval(updateCountdown, 1000);
updateCountdown();
</script>
Wenn ich z.B. auf Seite A bleibe und warte, dann wird nach Ablauf des Timers in den untergeordneten Fragebogen gesprungen. Danach geht es aber auf Seite B zurück, obwohl ich erwartet hätte, dass es zuerst nach BACK und von dort nach Seite A gehen müsste. Der Inhalt der Variablen $lastpage ist aber auch überraschenderweise "Seite B" (analog auf Seite B ist es "Seite C") und im Debug-Modus, wenn man sich im untergeordneten Fragebogen befindet, wird auch Seite B als vorhergehende Seite angezeigt. Warum passiert das und wie kann man das lösen?