Nico R.: removeEventListener funktioniert nicht mit Funktionsparametern

Beitrag lesen

Hallo,

ich habe li-Elemente, die sich per "click" öffnen lassen. Das click-Event hänge ich per addEventListener an. Beim Öffnen gebe ich als Parameter diverse Informationen mit, die dann in view_person() angezeigt werden.


var li = liste_view_inc.querySelectorAll("li");	

function click_view_person(li) {
  view_person(li.dataset.id, li.dataset.modus, li.dataset.vorname, li.dataset.nachname, li.dataset.telefon, li.dataset.email, li.dataset.notiz, li.dataset.anwesend);
}	

for(let i=0; i < li.length; i++) {
  li[i].addEventListener("click", function() {
    click_view_person(li[i]);
  });
}

Das funktioniert auch. Nun gibt es noch einen weiteren Modus, der den Listeneintrag nicht öffnet, sondern auswählt. Dazu möchte ich das "click"-Event der li-Elemente entfernen und ein neues hinzufügen.

liste_nav_menue_ausw.addEventListener("click", function() {
  for(let i=0; i < li.length; i++) {
    li[i].removeEventListener("click", click_view_person); 
    li[i].addEventListener("click", function(){
      // select-Funktion
    }); 
  }
});

Das funktioniert leider nicht. Die Funktion des zweiten Event-Listeners wird zugefügt, die erste bleibt aber ebenfalls erhalten. Das remove funktioniert nur, wenn ich eine test-Funktion ohne Parameter anhänge. Also so...

var li = liste_view_inc.querySelectorAll("li");	

function test() {
  console.log("test");
}	

for(let i=0; i < li.length; i++) {
  li[i].addEventListener("click", test);
}

liste_nav_menue_ausw.addEventListener("click", function() {
  for(let i=0; i < li.length; i++) {
    li[i].removeEventListener("click", test); 
    li[i].addEventListener("click", function(){
      // select-Funktion
    }); 
  }
});

Gehe ich das grundsätzlich falsch an oder bin ich kurz vor der Lösung? Ich hab irgendwie gerade ein Brett vorm Kopf.

Schöne Grüße

Nico

akzeptierte Antworten