Funktion JavaScript funktioniert nicht.?


06.01.2022, 11:28
// 2. FRAGE
function frage2(){ // nach richtiger antwort aufgerufen
   delete richtig;
   buttonvoll(); //buttons sichtbar machen
   document.getElementById("frage1").innerHTML = 'Was haben wir im Urlaub gemacht?'; // 2. frage
   document.getElementById("text").innerHTML = 'super gemacht! </br> Errinnerst du dich noch an unseren 1. Urlaub?';
   document.getElementById("button1").innerHTML = 'Schneemann'; //antworten in buttons schreiben
   document.getElementById("button2").innerHTML = 'Schneefrau';
   document.getElementById("button3").innerHTML = 'Schneeengel';
   document.getElementById("button4").innerHTML = 'Schneeballschlacht';
   document.getElementById("button3").id = 'test2'; // kurzes umbennenen der richtigen antwort
   var richtig2 = document.getElementById('test2'); //klick-event bei richtiger Antwort
   richtig2.addEventListener('click', weg2);
   function weg2(){
      document.getElementById("test2").id = 'button3'; // umweg um zurückspringen zu verhindern
      video4();
   }
}
function video4(){
      document.getElementById("video").style.fontSize = "55pt"; //Link sichtbar machen
   buttonleer(); // button verbergen
   document.getElementById("frage1").innerHTML = ''; // Frage leer
   document.getElementById("video").innerHTML = 'weiter gehts';
   document.getElementById("video").href = 'https://youtu .be/bE3N64nofss'; //Winterurlaub
   var weiter4 = document.getElementById('video'); //klick-event bei drücken auf link
   weiter4.addEventListener('click', frage3);   
}
// 3. FRAGE
function frage3(){   // bei richtiger antwort aufgerufen
...
   

Kannst du den Code lesbar in die Frage einfügen statt ein Foto vom Bildschirm zu machen?

0Ahnunq 
Fragesteller
 06.01.2022, 11:25

Ok, danke. Ich versuche es. ;)

Aber das gesamte Program ist sehr lang und unübersichtlich. Ich würde den entscheidenden Teil hochladen.

1 Antwort

Dein Codeausschnitt reicht nicht aus, um eine definitive Antwort zu geben. Eine Vermutung vom mir ist aber, dass du auf dein Element mit der ID test2 einfach immer nur einen neuen click-Eventlistener drauf packst. Damit wird aber der vorherige Listener nicht entfernt und der wird auch zuerst aufgerufen.

Du solltest nach dem Aufruf also immer den vorherigen Eventlistener entfernen:

https://www.w3schools.com/jsref/met_element_removeeventlistener.asp

Alternativ kannst du deine Programmlogik auch so abändern, dass du mit einem click-Event auskommst und da drin jeweils entscheidest, mit welchem Video es weitergeht.

Woher ich das weiß:Berufserfahrung – Entwickle Webseiten seit über 25 Jahren.
0Ahnunq 
Fragesteller
 06.01.2022, 17:36

Hey, erstmal vielen Dank für die Antwort. :)

Ich hab die ID eigentlich extra jedes mal mit einem neuen Idex versehen (test1, test2, ...). Und bevor ich die Videos eingefügt habe hat auch alles funktioniert.

Ich sehe auch keinen Unterschied zu den ersten zwei Videos und Fragen wo alles funktioniert. :(

0
Babelfish  06.01.2022, 18:46
@0Ahnunq

Ohne den ganzen Code kann man dazu nichts weiter sagen. Auf jeden Fall ist das nicht wirklich gut durchdacht programmiert. Die ID eines Elements solltest du zum Beispiel nie ändern und dazu gibt es auch keine Notwendigkeit bei dir.

Um den Fehler zu finden, solltest du zum Debuggen am besten mal ein paar console.log("ich bin hier") einbauen um zu sehen, welcher Eventhandler und welche Funktion an welchem Punkt aufgerufen wird. Das hilft am einfachsten solche Fehler einzugrenzen.

0
0Ahnunq 
Fragesteller
 07.01.2022, 21:01
@Babelfish

Ich bin leider totaler Anfänger und hab das irgendwie zusammengebastelt. 😅🙈 Danke dann probiere ich da nochmal rum.

0