Hallo,
ich bin dabei für ein Projekt mithilfe der Zuordnungsaufgabe mit Reaktionszeiten einen Stroop-Test zu erstellen.
Es gibt eine Frage mit 95 Items.
Ich würde gerne dafür sorgen, dass nach einer Antwort direkt angezeigt wird, ob diese richtig/falsch war. Am besten kurz in der Zeit zwischen den Items (ich hab' momentan eine Verzögerung von 100ms eingestellt, in der "nur" das Fixationskreuz angezeigt wird).
Ich bin soweit gekommen, dass beim ersten Item richtig/falsch angezeigt wird, allerdings verschwindet das Feedback nicht wieder und der Test geht auch nicht weiter sondern bleibt auf diesem ersten Item stehen.
Hier ist mein Code bis jetzt:
(die restlichen 93 Items müssen dem Array am Anfang noch hinzugefügt werden)
<div id="answer" style="font-size: 24px; color: green; position: absolute;"></div>
<script type="text/javascript">
<!--
function selFilter(item, option) {
// Mapping der richtigen Antworten
var correct = {
01: 1,
02: 3
// Weiterhin Mapping für alle Items hinzufügen
};
// Überprüfung, ob die gewählte Antwort korrekt ist
var answerText = "";
if (option == correct[String(item)]) {
answerText = "richtig";
document.getElementById("answer").style.color = "green"; // Richtig wird grün
} else {
answerText = "falsch";
document.getElementById("answer").style.color = "red"; // Falsch wird rot
}
// Hier wird die Antwort angezeigt
var answerElement = document.getElementById("answer");
answerElement.innerText = answerText;
// Setze die Position des Antworttexts in der Nähe des Items
var itemElement = document.querySelector(`#${String(item).padStart(2, '0')}`); // IDs sind nun "01", "02", "03", ...
// Berechne die Position des Items und setze die Anzeige relativ dazu
var itemRect = itemElement.getBoundingClientRect();
answerElement.style.left = (itemRect.left + window.scrollX + itemRect.width / 2 - answerElement.offsetWidth / 2) + "px";
answerElement.style.top = (itemRect.top + window.scrollY + itemRect.height + 10) + "px"; // 10px Abstand nach unten
// Zeige die Antwort an
answerElement.classList.add('show'); // Zeige die Antwort nach der Auswahl
// Setze einen Timer, um das Feedback nach 500ms zu entfernen
setTimeout(function() {
answerElement.classList.remove('show'); // Verstecke die Antwort
}, 500); // 500ms Verzögerung
}
// Beispiel: Event-Listener nach Laden der Seite
SoSciTools.attachEvent(window, "load", function() {
assignmentSU01.setCallbackSelect(selFilter);
});
-->
</script>
Der letzte Teil ab setTimeout() funktioniert nicht mehr, gehe ich zumindest von aus. Ich vermute, dass ich irgendwie ein return 0; reinbringen muss, aber das ist nur Spekulation.
Ich möchte dafür sorgen, dass das Feedback wieder verschwindet (die 500ms waren erstmal provisorisch zum testen) und der Test automatisch weiterläuft, wie er das normalerweise tut, wenn der Code-Baustein nicht eingefügt ist (die Items werden zufällig abgerufen und für eine bestimmte Zeit präsentiert). Wie gesagt bleibt der Test momentan leider beim ersten Item stehen. Der programmierte Timer läuft allerdings weiter.
Vielen Dank für die Hilfe :)