0 votes
in SoSci Survey (dt.) by s356440 (130 points)

Ich habe in meiner Befragung anhand eines HTML- und JavaScript Codes einen anklickbaren Info-Button eingebunden. Dieser Info-Button gibt den Probanden zusätzliche Informationen und unterscheidet sich je nach experimenteller Zelle (also je nach Randomisierung anhand eines Zufallsgenerators).

Nun möchte ich nachverfolgen, ob dieser Info-Button von den Probanden in meinen jeweiligen Zellen (3 Zellen insgesamt) angeklickt wird und habe dafür eine Interne Variable mit den Kennungen IV01_01, IV01_02 und IV01_03 aufgesetzt.

Dank eines beispielhaften Codes auf eurer Anleitungs-Seite (Link) habe ich bereits folgenden Code für das Anzeigen des Info-Buttons und das Erfassens des Anklickens angelegt:

    <!-- Zunächst der Knopf zum Anzeigen der Info -->
<button type="button" onclick="buttonShow()">(i) Mehr Infos zur Prüfung der Kundenbewertungen</button>
 
<!-- Und dann die Info-Box -->
<div id="infoBox" style="width: 400px; padding: 5px; background-color: white; border: 2px solid #CCCCCC">
 <p>  Es findet keine Echtheitsprüfung der Kundenbewertungen statt. </p>
Damit ist nicht sichergestellt, dass die dargestellten Bewertungen von Verbrauchern stammen, welche die bewerteten Produkte tatsächlich erworben haben.
  <p style="text-align: center; margin-top: 20px">
    <button type="button" onclick="buttonHide()">Schließen</button>
  </p>
</div>
 
<!-- Der JavaScript-Code -->
<script type="text/javascript">
<!--
var info = document.getElementById("infoBox");
info.style.display = "none"; // Box ausblenden
info.style.position = "absolute";
info.style.zIndex = 999;
// Entweder fix auf der Seite platziert
// info.style.left = "50px";
// info.style.top = "100px";
// Oder ein definiertes Stückchen unter dem Knopf
info.style.marginTop = "10px";
 
function buttonShow() {
  // Infobox anzeigen
  info.style.display = "";
}
function buttonHide() {
  // Infobox wieder ausblenden
  info.style.display = "none";
}

var info = document.getElementById("infoBox");
var intVar = document.getElementById("IV01_01"); // Hier muss die Kennung der internen Variable eingetragen werden
info.style.display = "none"; // Box ausblenden
intVar.value = "1";
 
function buttonShow() {
  // Infobox anzeigen
  info.style.display = "";
  // Abspeichern, dass der Button angeklickt wurde
  intVar.value = "2";
}
function buttonHide() {
  // Infobox wieder ausblenden
  info.style.display = "none";
}
//-->
</script>

Ich frage mich nun, wie ich sicherstellen kann, dass diese interne Variable tatsächlich erfasst, ob der Info-Button angeklickt wurde. Wird das erst beim durchführen eines Pre-Tests ersichtlich?

Außerdem würde ich gerne erfassen, wie lange der Info-Button bei den Probanden ausgeklappt war, konnte hierfür allerdings keine Anleitung aus euren Websiten finden. Wie könnte ich eine entsprechende Zeiterfassung in meinen Code integrieren?

1 Answer

0 votes
by SoSci Survey (370k points)

Vorab eine kleine Anmerkung: Sie definieren die Funktionen buttonShow() und buttonHide() in Ihrem Code gerade doppelt - die obere Version sollten Sie entfernen.

wie ich sicherstellen kann, dass diese interne Variable tatsächlich erfasst, ob der Info-Button angeklickt wurde.

Im einfachsten Fall machen Sie die Variable zum Testen sichtbar:

var intVar = document.getElementById("IV01_01");
// Neue Zeile ergänzen
intVar.setAttribute("type", "text");

Sie sehen es nach dem Klick auf "Weiter" aber auch in der Debug-Information, denn Sie die Seite bzw. den Fragebogen im Debug-Modus starten.

Außerdem würde ich gerne erfassen, wie lange der Info-Button bei den Probanden ausgeklappt war

Dafür gibt es unterschiedliche Lösungen. Im Endeffekt funktioniert es so, dass Sie sich von JavaScript bei jedem Klick ie Zeit geben lassen, sich die Zeit beim Öffnen in einer JS-Variable "merken" und beim Schließen dann die Zeitdifferenz in einer internen Variable speichern.

SoSci Survey bringt die Bibliothek LatencyTimer() mit. Sehen Sie sich in der Anleitung einmal den Abschnitt "Sonstige Ereignisse aufzeichnen" an. Im Idealfall können Sie das direkt auf Ihren Fall übertragen.

by s356440 (130 points)
Danke erstmal für die ganzen Hinweise! Dabei ist mir nun aufgefallen, dass der Wert für IV01_01 (zur Erfassung, ob der Info-Button überhaupt angeklickt wurde) von 2 (wurde angeklickt) auf 1 (wurde nicht angeklickt) zurückspringt, wenn der Befragte nochmals auf die Seite geht und diese dann ohne erneutes öffnen des Info-Buttons wieder verlässt. Wie kann ich den Wert von IV01_01 also derart fixieren, dass nach (mind.) einmaligem anklicken des Info-Buttons im Verlauf der Befragung die Variable = 2 ist und sich dieser Wert auch nicht ändert?

Außerdem bin ich nun dabei, einen Code für die Zeiterfassung zu basteln, komme hier jedoch auf keine Lösung. Folgenden Code (aus der LatencyTimer Bibliothek) habe ich versucht anzuwenden:

window.addEventListener("load", function() {
    var timer = new LatencyTimer();
    document.getElementById("infoBox").addEventListener("click", timer.eventHandler("IV02_01"));
    document.getElementById("buttonHide").addEventListener("click", timer.eventHandler("IV02_02"));
});

Allerdings habe ich dabei folgende Probleme:
- kriege für IV02_01 entweder gar keine Antwort oder nur -7 oder -6 als Werte
- und für IV02_02 wird gar keine Antwort erfasst (sprich ich habe das schließen des Info-Buttons vermutlich noch nicht korrekt im Code zur Zeiterfassung hinterlegt)

Wie ist nun vorzugehen? Der gesamte Code sieht so aus:

<!-- Zunächst der Knopf zum Anzeigen der Info -->
<button type="button" onclick="buttonShow()">(i) Mehr Infos zur Prüfung der Kundenbewertungen</button>
 
<!-- Und dann die Info-Box -->
<div id="infoBox" style="width: 400px; padding: 5px; background-color: white; border: 2px solid #CCCCCC">
 <p>  Es findet keine Echtheitsprüfung der Kundenbewertungen statt. </p>
Damit ist nicht sichergestellt, dass die dargestellten Bewertungen von Verbrauchern stammen, welche die bewerteten Produkte tatsächlich erworben haben.
  <p style="text-align: center; margin-top: 20px">
    <button type="button" onclick="buttonHide()">Schließen</button>
  </p>
</div>
 
<!-- Der JavaScript-Code -->
<script type="text/javascript">
<!--
var info = document.getElementById("infoBox");
info.style.display = "none"; // Box ausblenden
info.style.position = "absolute";
info.style.zIndex = 999;
// Entweder fix auf der Seite platziert
// info.style.left = "50px";
// info.style.top = "100px";
// Oder ein definiertes Stückchen unter dem Knopf
info.style.marginTop = "10px";
 
var info = document.getElementById("infoBox");
var intVar = document.getElementById("IV01_01"); // Hier muss die Kennung der internen Variable eingetragen werden
info.style.display = "none"; // Box ausblenden
intVar.value = "1";
 
function buttonShow() {
  // Infobox anzeigen
  info.style.display = "";
  // Abspeichern, dass der Button angeklickt wurde
  intVar.value = "2";
}
function buttonHide() {
  // Infobox wieder ausblenden
  info.style.display = "none";
}

window.addEventListener("load", function() {
    var timer = new LatencyTimer();
    document.getElementById("infoBox").addEventListener("click", timer.eventHandler("IV02_01"));
    document.getElementById("buttonHide").addEventListener("click", timer.eventHandler("IV02_02"));
});

//-->
</script>
by SoSci Survey (370k points)
> Wie kann ich den Wert von IV01_01 also derart fixieren, dass nach (mind.) einmaligem anklicken des Info-Buttons im Verlauf der Befragung die Variable = 2 ist und sich dieser Wert auch nicht ändert?

Lesen sie dern Wert aus, bevor Sie ihne setzen. Also statt

intVar.value = "1";

würden sie schreiben:

if (!intVar.value) {
  intVar.value = "1";
}

> - kriege für IV02_01 entweder gar keine Antwort oder nur -7 oder -6 als Werte

Die Codes -6 und -7 werden in der Anleitung erklärt. Ändern Sie mal

timer.eventHandler("IV02_01")

in

timer.eventHandler("IV02_01", true)

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

...