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

0 votes

Ist es möglich, die Sekundenangabe mit Kommastelle anzugeben, z.B. als "4.3"? Wenn ich 4.3 eingebe, steht da, dass er von 5 Sekunden herunterzählt, aber vielleicht sind es genau genommen eh nur 4.3.

in SoSci Survey (dt.) by s098891 (200 points)

1 Answer

0 votes

Das Beispiel-JavaScript in der Anleitung hat für die Anzeige des Timers eine Funktion, die sekündlich aufgerufen wird.

Sie können die Funktion auch alle 100ms aufrufen und jeweils 0,1 subtrahieren. Für die Anzeige müssten Sie dann evtl. noch mit

Math.round(zahl * 10) / 10

arbeiten. Aber vermutlich ist das gar nicht erforderlich.

by SoSci Survey (82.1k points)
Danke, ich bin mir aber nicht sicher, wo ich das Genannte (100ms, 0, 1 subtrahieren...) einfügen soll? Z.b. wenn der Timer 7,3'' dauern soll?

if (!isset($time5)) {
  $time5 = time();
  registerVariable('time5');  // 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 = 7;  // Der Teilnehmer hat 1 Minute (60 Sekunden) Zeit zur Bearbeitung
if (time() >= $time5 + $timer) {
  goToPage('next');
}
// Die verbleibende Zeit muss auch dem JavaScript-Code bekannt gemacht werden
$remain = $time5 + $timer - time();
replace('%remain%', $remain);
Das ist erstmal nur der PHP-Code. Dort würden Sie einfach diese Zeile ändern:

$timer = 7.3;

Aber das wesentliche für die Zeitkontrolle auf der Seite ist der JavaScript-Code, welcher den Platzhalter %remain% verwendet.
Also muss ich direkt nach %remain% was einfügen?
Der Timer besteht aus zwei mehr oder weniger unabhängigen Codes. Einem PHP-Code, den Sie oben zitiert haben und einem JavaScript-Code. In zweiterem, den Sie hier nicht (!) zitiert haben, muss die Änderung gemacht werden.
Code gefunden!

Also mit "var timeout = date0.getTime() + %remain% * 100" statt "* 1000", und in "var time = Math.ceil((timeout - date.getTime() - 1) / 1000)" und   "var seconds = String(time - 0 * minutes)" statt -50 / -60?

<script type="text/javascript">
<!--
// 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);
}
// Initialisierung der Weiterleitung
SoSciTools.attachEvent(window, "load", function(evt) {
  // Weiter-Knopf ausblenden (optional)
  SoSciTools.submitButtonsHide();
  // 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>
Wenn Sie im PHP-Teil mit einer Dezimalzahl arbeiten, können Sie das *1000 belassen. Aber an diesen drei Stellen müssten Sie etwas ändern:

var time = Math.ceil((timeout - date.getTime() - 50) / 1000);
var time = Math.ceil((timeout - date.getTime() - 50) / 100) / 10;

und

window.setInterval(updateCountdown, 1000);
window.setInterval(updateCountdown, 100);

und

if (seconds.length < 2) seconds = "0" + seconds;
if (seconds < 9) seconds = "0" + seconds;

Da die Zeit automatisch anhand des aktuellen Zeitstempels berechnet wird, muss man sich wegen der Subtraktion keine Gedanken machen.
...