0 votes
in SoSci Survey (dt.) by s066509 (165 points)
edited by SoSci Survey

Guten Tag,

ich würde gerne eine Antwortlatenzmessung durchführen, also die Zeit von dem Moment an, wo sich die Fragebogenseite öffnet, bis zu dem Zeitpunkt, wo eine Antwort durch den Probanden abgegeben wird. Das habe ich mit einem 'keydown'-Befehl bzw. einem EventListener umgesetzt, dementsprechend soll die Messung enden, wenn die erste Taste bedient wurde.

Leider funktioniert die Datenausgabe dieser Differenzmessung nicht. In einem online code editor (PlayCode) funktioniert die Messung an sich, die Console gibt mir die Differenz der beiden Zeitpunkte richtig aus. Außerdem erhalte ich auch keine Fehlermeldung beim Pretest des Fragebogens, wo ja ansonsten Fehlermeldungen beim Durchlaufen erscheinen.

Ich denke, das Problem liegt bei der Ablegung der Werte in meiner internen Variable ("IV01"). Ich habe schon verschiedene Möglichkeiten ausprobiert, die Werte zu speichern - die interne Variable taucht auch bei den erhobenen Daten oben in die Spalten auf, ist aber entweder leer oder zeigt mir (manchmal) folgendes viermal hintereinander an: [object PerformanceMeasure].

Die oben genannte Ausgabe in der internen Variable ([object PerformanceMeasure]) habe ich mit folgenden Code erhalten:

<script>

performance.mark("mess0"); // Setzen des ersten Messpunktes 1, wir müssen 0 verwenden da man bei 0 anfängt zu zählen

addEventListener("keydown", function() { // Befehl, der eine Tastatureingabe überwacht
  performance.mark("mess1"); // Setzen des ersten Messpunktes 2
  performance.measure("differenz1", "mess0", "mess1"); // Differenzbildung der beiden Messwerte		
  var messpunkte = performance.getEntriesByType("mark"); // Variablenvergabe, Variable heisst Messpunkte, und es werden alle "marks" automatisch benannt
  var messdifferenzen = performance.getEntriesByType("measure"); // Variablenvergabe, Variable heisst Messdifferenzen, und es werden alle "measures" automatisch benannt

  var input = document.getElementById("IV01_01")
  input.value = messdifferenzen

});
</script>

Vielen Dank im Voraus!
LG Daniel

Ps: Sorry, leider klappt es nicht den Code in den grauen Kasten einzubinden. :(

by SoSci Survey (328k points)
> Ps: Sorry, leider klappt es nicht den Code in den grauen Kasten einzubinden. :(

Sie waren schon auf dem richtigen Weg. Man muss den kompletten Code markieren und dann den Knopf {} klicken :) Hiermit nachgeholt.

1 Answer

0 votes
by SoSci Survey (328k points)

Zunächst einmal ist es wichtig, dass die Variable vor dem JavaScript-Code auf der Seite eingebunden ist (Frage in die Seite gezogen). Weiterhin wird der Wert erst im Datensatz gespeichert, wenn man auf "Weiter" klickt - außer, Sie aktivieren die kontinuierliche Übermittlung im Hintergrund für die interne Variable.

Dann empfehle ich, die folgenden beiden Zeilen (auch) mit einem Semikolon abzuschließen, wobei das vermutlich nicht für den Fehler verantwortlich ist.

var input = document.getElementById("IV01_01")
input.value = messdifferenzen

aber entweder leer oder zeigt mir (manchmal) folgendes viermal hintereinander an: [object PerformanceMeasure].

Letzteres würde bedeuten, dass messdifferenzen keine Zahl ist, sondern ein JavaScript-Objekt. Daraus müsste man den Zahlenwert dann wohl noch auslesen. Ergänzen Sie unter den o.g. Zeilchen doch noch folgende Zeile:

console.log(messdifferenzen);

Dann öffnen Sie bitte die Fehlerkonsole im Browser, lassen das Script laufen und posten Sie, was dort an zusätzliche Information angezeigt wird. Evtl. müssen Sie das Objekt in der Konsole noch "aufklappen".

by s066509 (165 points)
Vielen Dank, ich habe soweit die Anmerkungen angepasst. :) Wenn ich die Fehlerkonsole im Browser öffne, erscheint mehrfach folgende Meldung:

[Log] Array (1) (index.php, line 254)
0 PerformanceMeasure {name: "differenz1", entryType: "measure", startTime: 90, duration: 5193, toJSON: function}

Array Prototyp

[Log] Array (2) (index.php, line 254)
0 PerformanceMeasure {name: "differenz1", entryType: "measure", startTime: 90, duration: 5193, toJSON: function}
1 PerformanceMeasure {name: "differenz1", entryType: "measure", startTime: 90, duration: 5428, toJSON: function}

Array Prototyp

[Log] Array (3) (index.php, line 254)
0 PerformanceMeasure {name: "differenz1", entryType: "measure", startTime: 90, duration: 5193, toJSON: function}
1 PerformanceMeasure {name: "differenz1", entryType: "measure", startTime: 90, duration: 5428, toJSON: function}
2 PerformanceMeasure {name: "differenz1", entryType: "measure", startTime: 90, duration: 5624, toJSON: function}

In den erhobenen Daten taucht leider weiterhin die Fehlermeldung von oben auf ([object PerformanceMeasure]) anstatt eines Wertes (Messdifferenzen).
by SoSci Survey (328k points)
> weiterhin die Fehlermeldung von oben auf ([object PerformanceMeasure]) anstatt eines Wertes (Messdifferenzen).

Das ist keine Fehlermeldung ;) Das ist genau das, was Sie abspeichern, nämlich ein Verweis auf ein Objekt des Typs PerformanceMeasure bzw. ein Array mit Elementen dieses Typs.

Aber aus der Fehlerkonsole wissen wir nun, was wir da genau haben. Und zwar wird das Ganze dreimal aufgerufen. Am Ende haben wir ein Array (eine Liste) mit 3 Einträgen. Wenn Sie die letzten 3 Log-Einträge ansehen, haben wir immer die gleiche Start-Zeit (90) aber drei unterschiedliche Messungen für die Dauer (5193, 5428 und 5624). Vermutlich in Millisekunden.

Meine Vermutung ist, dass Sie drei Tasten gedrückt haben. Die Frage ist nun: Was hätten Sie denn gerne davon? Die erste Taste? Entsprechend dem ersten Ereignis (welche den Index 0 hat). Dann ändern Sie den Code wie folgt:

input.value = messdifferenzen[0].duration;

Das [0] sucht den ersten Eintrag aus der Liste. Das .duration nimmt die Eigenschaft ["duration"] aus diesem Eintrag.
by s066509 (165 points)
Super, vielen Dank, nun klappt es endlich! :) Genau, ich wollte nur den ersten Tastendruck & somit das erste Ereignis als Zeitpunkt 2 festlegen.
by SoSci Survey (328k points)
Bitte prüfen Sie, ob Sie evtl. noch messdifferenzen[0].startTime subtrahieren müssen. Ich sehe nur die Daten, kann Ihnen aber nicht sagen, was sie bedeuten - sprich ab wann das "duration" gezählt ist.

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

...