0 votes
in SoSci Survey (dt.) by s235272 (320 points)

Sehr geehrte Damen und Herren,
ich habe einen Fragebogen erstellt, indem ich auf einer der ersten Seiten einen Timer angelegt habe (15 Minuten).Dabei ist der Fragebogen so angelegt, dass die Befragten erst nach Ablauf des Timers über den "Weiter"-Button die Befragung fortsetzen können. Beim weiteren Durchgehen des Fragebogens besteht allerdings auch die Möglichkeit, dass man mittels eines "Zurück"-Reiters immer wieder auf vorherige Seiten des Fragebogens zurückgehen kann und sich bereits gespeicherte Antworten zur Kontrolle nochmal ansehen kann. Problematisch ist nun, dass - wenn man beim Zurückgehen auf die besagte Seite mit dem Timer wieder stößt - der Timer von 15 Minuten erneut anfängt zu starten und der "Weiter"-Reiter hier erst nach 15 Minuten wieder erscheint, sodass man als Befragter diese Zeit über warten muss (die eingetragenen Antworten verschwinden nicht, sondern bleiben bestehen was darauf hindeutet, dass der Fragebogen nicht komplett neu lädt). Mein Wunsch wäre es, dass der Timer nur einmal (ganz am Anfang der Umfrage) erscheint und herunterzählt und ansonsten, wenn man über den "Zurück"-Reiter in der Umfrage zurückgeht nicht noch einmal 15 Minuten warten muss - d.h. das der Timer dann nicht mehr angezeigt wird. Wie muss ich meinen folgenden Code konkret so verändern, damit ich meinen o.g. Wunsch umsetzen kann? Können Sie mir sagen, welcher Befehl bzw. Code ergänzt werden muss, dass dies möglich ist? Vielen Dank und herzliche Grüße

<script type="text/javascript">
<!--

var countdown = 900;
var countdownDisplay;
var countdownTimer;
// "submit0" ist der Weiter-Knopf,
// mit "buttonsAuto" kann man auch den Zurück-Knopf ausblenden
var buttonID = "submit0"; 

function countdownStart() {
  // Next button
  var button = document.getElementById(buttonID);
  // Create countdown element
  countdownDisplay = document.createElement("div");
  var cd = countdownDisplay;
  cd.style.display = "inline-block";
  cd.style.textAlign = "center";
  cd.style.fontWeight = "bold";
  cd.style.width = button.offsetWidth + "px";
  cd.style.height = button.offsetHeight + "px";
  // Init countdown
  button.parentNode.appendChild(countdownDisplay);
  countdownRefresh();
  // Hide next button
  button.style.display = "none";
  // Start countdown
  countdownTimer = window.setInterval(countDown, 1000);
}

function countDown() {
  if (countdown > 1) {
    countdown--;
    countdownRefresh();
  } else {
    window.clearTimeout(countdownTimer);
    // Display nextbutton
    var button = document.getElementById(buttonID);
    button.style.display = "";
    // Remove countdown
    button.parentNode.removeChild(countdownDisplay);
  }
}

function countdownRefresh() {
  // Clear
  while (countdownDisplay.lastChild) {
    countdownDisplay.removeChild(countdownDisplay.lastChild);
  }
  // Display
  var content = document.createTextNode(countdown + " Sek.");
  countdownDisplay.appendChild(content );
}

SoSciTools.attachEvent(window, "load", countdownStart);

// -->
</script>

1 Answer

0 votes
by SoSci Survey (328k points)

Eine Möglichkeit, um den Timer nur einmalig zu starten, ist die Verwendung einer PHP-Variable als Referenz, vgl. Timer: Countdown über mehrere Seiten.

Das hilft auch für den Fall, dass jemand die Seite mittels F5 neu lädt.

by s235272 (320 points)
Vielen Dank für die schnelle Rückmeldung. Die Einbindung über PHP-Variable war mir auch bewusst (siehe Kommentar). Die angegebene Seite unter dem Link war mir daher auch bekannt, aber für mich noch nicht hilfreich. Könnten Sie mir noch einen konkreten Tipp geben, wie  und welcher PHP-Code sinnvoll erscheint (siehe Fragestellung)? Viele Grüße und herzlichen Dank.
by SoSci Survey (328k points)
Im Prinzip müssen Sie an dieser Zeile Ihres Codes ansetzen:

var countdown = 900;

Dort muss statt der 900 die Differenz zwischen dem Ende des Countdowns und dem aktuellem Zeitstempel stehen. Die Zahl fügen Sie dann per Platzhalter (s. Anleitung) ein.

Und damit sind SIe auch im PHP-Code. Das Ende definieren Sie dort in eine Variable. und it der Kombination aus isset() und registerVariable() stellen Sie sicher, dass sich daran im Verlauf der Interviews nichts mehr ändert.

if (!isset($ende)) {
  $ende = time() + 900;
  registerVariable($ende);
}
replace('%ende%', $ende - time());
by s291801 (150 points)
Können Sie das bitte noch etwas genauer erläutern? Ich habe ein ähnliches Anliegen. Ich habe einen Timer auf einer Seite, wo eine Pflichtauswahl stattfindet. Wenn man bei dieser Frage keine Auswahl getroffen hat und dennoch auf weiter klickt, geht der Timer von vorne los. Was muss ich wo an Code einfügen um das zu unterbinden? Der Timer soll nur beim ersten Laden der Seite ablaufen.
by SoSci Survey (328k points)
Haben Sie es mit der in der Antwort verlinkten Lösung ausprobiert? Ansonsten müssten Sie bitte konkretisieren, wie Sie den Timer genau eingebunden haben.

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

...