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

Ich habe den Timer eingestellt, dass dieser nach 2 Minuten die Seite wechseln soll. Das Problem ist aber, dass nach Ablauf der 2 Minuten zu der Seite gewechselt wird, wo ich den Timer noch nicht eingestellt habe. Was müsste ich ändern, dass nach 2 Minuten direkt zur nächsten Seite gewechselt wird und nicht nur zu einer Seite, die noch nicht bearbeitet wurde.

if (!isset($time0)) {
$time0 = time();
registerVariable($time0); // Die Variable $time0 auch nach Ende des PHP-Codes aufbewahren
}
// Prüfung, ob die Zeit schon abgelaufen ist
// (z.B. weil der Teilnehmer die Seite neu geladen hat)
$timer = 120; // Der Teilnehmer hat 2 Minute (120 Sekunden) Zeit zur Bearbeitung
if (time() >= $time0 + $timer) {
goToPage('next');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $time0 + $timer - time();
replace('%remain%', $remain);

replace('%remain%', 120); // Der Teilnehmer hat 120 Sekunden für die Bearbeitung


<!--

// Funktion zur Weiterleitung
function weiter() {

// Den Teilnehmer zur nächsten Seite weiterleiten
SoSciTools.submitPage();
}

// Weiter-Knopf ausblenden (optional)
SoSciTools.submitButtonsHide();

// Initialisierung der Weiterleitung
SoSciTools.attachEvent(window, "load", function(evt) {
// Timer für automatische Weiterleitung starten
window.setTimeout(weiter, %remain% * 1000);
});

// -->

Verbleibende Zeit:


<!--

// Funktion zur Weiterleitung
function weiter() {

// Den Teilnehmer zur nächsten Seite weiterleiten
SoSciTools.submitPage();
}

// Countdown anzeigen
var date0 = new Date();
var timeout = date0.getTime() + %remain% * 1000;
function updateCountdown() {
// Zeit berechnen
var date = new Date();
var time = Math.ceil((timeout - date.getTime() - 50) / 1000); // Verbleibende Zeit in Sekunden
// Zeit anzeigen
var out = document.getElementById("remain");
if (!out) {

return;

}
while (out.lastChild) {

out.removeChild(out.lastChild);

}
var minutes = Math.floor(time / 60);
var seconds = String(time - 60 * minutes);
if (seconds.length < 2) seconds = "0" + seconds;
var display = String(minutes) + ":" + seconds;
var displayNode = document.createTextNode(display);
out.appendChild(displayNode);
}

// Weiter-Knopf ausblenden (optional)
SoSciTools.submitButtonsHide();

// Initialisierung der Weiterleitung
SoSciTools.attachEvent(window, "load", function(evt) {
// Zusätzlicher Timer für die Aktualisierung des Countdowns
window.setInterval(updateCountdown, 1000);
updateCountdown();
// Timer für automatische Weiterleitung starten
window.setTimeout(weiter, %remain% * 1000);
});

// -->

by SoSci Survey (305k points)
> Was müsste ich ändern, dass nach 2 Minuten direkt zur nächsten Seite gewechselt wird und nicht nur zu einer Seite, die noch nicht bearbeitet wurde.

Auf welcher Seite haben Sie den Timer und auf welche Seite wird aktuell gewechselt, wenn dieser augelaufen ist?

Bitte posten Sie auch die Debug-Information, die nach dem Wechsel angezeigt wird: https://www.soscisurvey.de/help/doku.php/de:create:debugging
by s204433 (155 points)

Also in unserem Fragebogen hat die Versuchsperson immer 2 Minuten pro Seite die Fecehnaufagebn zu lösen. NACH Ablauf der 2 Minuten müssten sie auf die nächste Seite weitergeleitet werden um die nächste Seite mit Recehnaufgaben zu bearbeiten. Wir haben das eingestellt das nach 2 Minuten Zeit die Seite auf die nächste wechseln soll nur kommt man nach Ablauf der 2 Minuten auf die letzte Seite wo dann steht vielen Dank für ihre Teilnahmen und ihre Daten werden gespeichert. Da erscheint auch kein Weiter Knopf , der Fragebogen wird einfach beendet

1 Answer

0 votes
by SoSci Survey (305k points)

nur kommt man nach Ablauf der 2 Minuten auf die letzte Seite wo dann steht vielen Dank für ihre Teilnahmen und ihre Daten werden gespeichert.

Der oberste Teil im Code - das mit isset() - hat zwei Funktionen:

(a) es verhindert, dass man den Timer durch Neuladen der Seite überlisten kann und

(b) es lässt den Timer über mehrere Seiten hinweg laufen.

Zweiteres führt in Ihrem Fall dazu, dass nach zwei Minuten die Zeit für alle Seiten abgelaufen ist. Die Lösung ist denkbar einfach: Ändern Sie auf folgenden Seiten den Namen der Variable $time0, also z.B.

if (!isset($time1)) {
    $time1 = time();
    registerVariable($time1);
}
$time0 = $time1;
// Dadurch können Sie den Rest des Codes auf der Seite unverändert lassen

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

...