0 votes
in SoSci Survey (dt.) by s285141 (115 points)
edited by SoSci Survey

Hallo, in meinem Fragebogen habe ich viele Lückentextitems. Ich hätte gerne, dass Teilnehmende nicht per Mausklick die Lücke auswählt müssen, sondern direkt schreiben und per Enter absenden können. Im Forum habe ich dazu Code gefunden und ihn bei mir eingebaut, das scheint aber nicht zu funktionieren:

<script>
window.addEventListener("load", function() {
    var qnrForm = document.getElementById("questionnaireForm");
    var timer = new LatencyTimer();
    qnrForm.addEventListener("submit", timer.eventHandler("IV01_1.3.2", true));
});

<!--
SoSciTools.submitButtonsHide();

SoSciTools.attachEvent(window, "keydown", function(objEvent) {
    if (objEvent.keyCode == 13) {  // enter pressed
        objEvent.preventDefault(); // stops its action
        SoSciTools.submitPage();
        
    }
});
// -->
document.getElementById("FR02").focus();
</script>

Außerdem habe ich in einem anderen Teil des Fragebogens ein Timer, der über mehrere Seiten hinweg abläuft und einen dann zum nächsten Fragebogenteil weiterleitet. Jetzt habe ich aber das Problem, dass bei Zeitablauf sowohl auf der aktuellen Seite, als auch auf der darauf folgenden noch Angaben gemacht werden können, bevor man dann an die richtige Stelle des Fragebogens springt. Wo ist mein Fehler?

// Filter: Zeit abgelaufen?
if (time() >= $timeout) {
  goToPage('partNext');
}

// JavaScript zur Anzeige der verbleibenden Zeit
$timeLeft = $timeout - time();
show('OG05', array(
  '%timeLeft%' => $timeLeft
));

Vielen Dank für Ihre Hilfe!

by SoSci Survey (327k points)
>  sondern direkt schreiben und per Enter absenden können

Meinen Sie damit, dass beim Drücken der Eingabetaste zum nächsten Feld im Lückentext gesprungen wird (das sollte eigentlich automatisch der Fall sein) oder dass SoSci Survey tatsächlich zur nächsten Seite wechselt?

Der Code, den Sie oben zitieren, scheint mir eher zur Messung von Reaktionszeiten gedacht, zumindest der obere Teil, aber auch nicht so richtig.

> Jetzt habe ich aber das Problem, dass bei Zeitablauf sowohl auf der aktuellen Seite, als auch auf der darauf folgenden noch Angaben gemacht werden können

Haben Sie irgendwo ein registerVariable() für $timeout platziert? Dass auch auf der darauffolgenden Seite noch Angaben möglich sind, spricht dafür, dass bereits der IF-Filter auf der folgenden Seite nicht korrekt funktioniert.
by s285141 (115 points)
Hallo, danke für die Rückmeldung.
"Meinen Sie damit, dass beim Drücken der Eingabetaste zum nächsten Feld im Lückentext gesprungen wird (das sollte eigentlich automatisch der Fall sein) oder dass SoSci Survey tatsächlich zur nächsten Seite wechselt?"
-> letzteres. Ich habe immer nur eine Lücke pro Seite und möchte, dass sowohl diese direkt "aktiv" ist, nachdem die Seite geladen ist, als auch, dass man über Enter auf die nächste Seite kommt. Ja genau, oben werden noch Reaktionszeiten gemessen. Stimmt daran auch etwas nicht?


"Haben Sie irgendwo ein registerVariable() für $timeout platziert? Dass auch auf der darauffolgenden Seite noch Angaben möglich sind, spricht dafür, dass bereits der IF-Filter auf der folgenden Seite nicht korrekt funktioniert."
-> ich habe mich an die Anleitung hier (https://www.soscisurvey.de/help/doku.php/de:create:timer-countdown) gehalten und dementsprechend auf der ersten Seite, an der der Timer startet diesen Code:
// Ablauf der Zeit als Variable $timeout speichern
if (!isset($timeout)) {
  $timeout = strtotime('+240 seconds');
  registerVariable($timeout);
}

// Filter: Zeit abgelaufen?
if (time() >= $timeout) {
  goToPage('partNext');
}

// JavaScript zur Anzeige der verbleibenden Zeit
$timeLeft = $timeout - time();
show('OG05', array(
  '%timeLeft%' => $timeLeft
));

und dann ab der zweiten Seite:
// Filter: Zeit abgelaufen?
if (time() >= $timeout) {
  goToPage('partNext');
}

// JavaScript zur Anzeige der verbleibenden Zeit
$timeLeft = $timeout - time();
show('OG05', array(
  '%timeLeft%' => $timeLeft
));


Tut mir leid, ich habe bislang keine Erfahrung mit PHP-Codes und kann die Fragen daher nicht besser beantworten.
by s285141 (115 points)
... also zum ersten Punkt: Ich möchte, dass keine Mausverwendung nötig ist, bei der Bearbeitung der Seite mit dem Lückentext. Daher soll die Focus-Zeile das Feld direkt als "aktiv" kennzeichnen, sodass direkt losgeschrieben werden kann, und über attachEvent Enter als "Weiter-Button" verwendet werden können.

1 Answer

+1 vote
by SoSci Survey (327k points)
edited by SoSci Survey

Ja genau, oben werden noch Reaktionszeiten gemessen. Stimmt daran auch etwas nicht?

Wenn das beabsichtigt ist, dann ignorieren Sie meinen Hinweis. Es passte nur nicht zum Problem, das Sie in der Frage beschrieben hatten.

// Filter: Zeit abgelaufen?

Wenn Sie den Filter auf beide Seiten gesetzt haben, dürfte es nach Ablauf der Timers nicht möglich sein, die zweite Seite überhaupt noch zu erreichen.

Ergänzen Sie den Code bitte mal wie folgt, und teilen Sie dann mit, was die Debug-Information anzeigt.

// Filter: Zeit abgelaufen?
debug($timeout);
debug(time());
if (time() >= $timeout) {
  goToPage('partNext');
}

Daher soll die Focus-Zeile das Feld direkt als "aktiv" kennzeichnen, sodass direkt losgeschrieben werden kann

Eigentlich sollte diese Zeile das erledigen, aber Sie haben die Kennung der Frage angegeben, nicht die Kennung des Eingabefelds:

document.getElementById("FR02").focus();

Vermutlich ist das einzige Eingabefeld in der Frage auch das erste, entsprechend müsste es heißen:

document.getElementById("FR02_01").focus();

oder dass SoSci Survey tatsächlich zur nächsten Seite wechselt?"

Das trifft sich gut, ich habe von anderer Seite vorgestern auch das Anliegen vermittelt bekommen, dass SoSci Survey beim Springen zwischen den Eingabefeldern nicht mehr das "Weiter" fokussieren soll, wenn man beim letzten Feld ist, sondern direkt die seite abschicken soll.

Wir haben das nun auf www.soscisurvey.de geändert. Bitte mal ausprobieren.

by s285141 (115 points)
Danke!
Das mit dem Fokus und Enter klappt perfekt.


ich habe den Code um die Info ergänzt und Fehlermeldungen erhalten:
"Warnung: Im PHP-Code wurde die Variablen-Funktion $time() verwendet. Das ist nicht erlaubt.

Warnung: Der PHP-Code enthält Funktionen oder PHP-Elemente, die nicht für die Verwendung im Fragebogen freigegeben wurden. Falls Sie der Meinung sind, dass die monierten Konstrukte ungefährlich sind, setzen Sie sich bitte mit dem Administrator in Kontakt!"

und
"Warnung: Im PHP-Code wurde die Variablen-Funktion $time() verwendet. Das ist nicht erlaubt."

und
"Der PHP-Code enthält unzulässige Funktionsaufrufe oder Schlüsselwörter und wurde daher nicht ausgeführt"
by SoSci Survey (327k points)
Bitte verwenden Sie time() ohne Dollar-Zeichen davor. Das hatte ich oben versehentlich falsch geschrieben.

debug(time());
by s285141 (115 points)
Ich erhalte:

Debug-Information für $timeout:
$timeout = 1715542733 (integer)

Debug-Information für time():
time() = 1715542493 (integer)
by s285141 (115 points)
Hallo, wir haben eine Lösung gefunden: Der Codeschnipsel "Zeit abgelaufen?" muss vor das Item auf der Seite platziert werden.

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

...