0 votes
in SoSci Survey (dt.) by s170973 (120 points)
edited by SoSci Survey

Hallo,

ich möchte gern einen Countdown einstellen, der von 45 Sekunden rückwärts runterzählt. Aktuell beginnt er jedoch bei einer Minute und springt dann auf 44 Sekunden. Ich finde den Fehler leider nicht. Kann mir jemand helfen?

der PHP-Code lautet:

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 = 45;  // Der Teilnehmer hat 45 Sekunden (45 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);



Dann kommt ein Textbaustein mit dem HTML-Code:

<script type="text/javascript">
<!--
 
// Funktion zur Weiterleitung
function weiter() {
  // Eine Meldung anzeigen (optional)
  alert("Die Zeit ist vorbei.");
  // 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);
});
 
// -->
</script>

Dann ein HTML-Code:

<p>Verbleibende Zeit: <span id="remain"></span></p>

und zu guter Letzt der HTML-Code:

<script type="text/javascript">
<!--
 
// Funktion zur Weiterleitung
function weiter() {
  // Eine Meldung anzeigen (optional)
  alert("Die Zeit ist vorbei.");
  // 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() - 45) / 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 / 45);
  var seconds = String(time - 45 * 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);
});
 
// -->
</script>

1 Answer

0 votes
by SoSci Survey (305k points)

Sie haben diese Zeile hier:

var time = Math.ceil((timeout - date.getTime() - 45) / 1000);

Wenn Sie den Timeout auf 45 gesetzt haben, dann den aktuellen Zeitstempel in Millisekunden und nochmal 45 abziehen, dann bekommen Sie eine Zahl weit im Negativen. Die 1 Minute ist dann wahrscheinlich nur ein Artefakt, weil die im JavaScript verwendete Trennung in Minuten und Sekunden nicht auf negative Werte ausgelegt ist.

asked Nov 29, 2021 in SoSci Survey (dt.) by s170973 (120 points) Wie müsste die Zeile richtig heißen?

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

...