Du hast noch einen Pösen Pug drin, den Du zu Poden chleudern musst.
In der task() Funktion registierst Du einen submit-Handler, wertest darin die Antwort aus und startest dann nach 1s nochmal task(). Hier wird wieder ein submit-Handler registriert, der die Antwort... usw.
Ich hatte mich gewundert, warum nach ein paar Fragen ein Spielautomat-Effekt bei den Aufgabenzahlen auftrat. Grund war, dass ca 50 Eventhandler aktiv waren und jeder eine neue Aufgabe stellen wollte.
Problem: Du registrierst eine inline-Funktion als submit-Handler. Das ist jedesmal ein neues Function-Objekt, oder zumindest bildet es eine neue Closure um den Aufrufkontext von task(), und darum wird jedesmal neu registriert.
Lösung 1: Irgendwie erkennen, dass schon registriert ist und es nur beim ersten Mal tun. Das erste Mal ist eh am schönsten.
Lösung 2: Keine inline-Funktion verwenden, sondern eine eigene Funktion evaluateResponse(evt), die außerhalb von task() definiert ist. Sie hat dann trotzdem Zugriff auf die Closure des ready-Handlers, und das reicht. Ich habe mir deine HTML Seite mal lokal kopiert und diese Lösung probiert - zumindest Chrome erkennt dann, dass er diesen Handler schon hat, und registriert ihn nicht nochmal.
evaluateResponse innerhalb von task() als eigene Funktion zu definieren funktioniert dagegen nicht. Auch hier würde jedesmal eine neue Closure gebildet und ein neuer submit-Handler registriert.
Rolf