Estoy tratando de eliminar el detector de eventos que agregué en bucle for pero no funcionó
¿Hay alguna manera de hacer esto con js puro?
for (let i = 0; i < drumPads.length; i++) { drumPads[i].addEventListener("click", func) function func() { display.innerHTML = music[i][0]; sound.src = music[i][1]; sound.play(); } }Su función func debe definirse fuera del ciclo.
En su código, la función func tiene un alcance de bloque y, por lo tanto, esto no se referirá a la misma memoria cuando el usuario ingrese con la condición "encendido" y "apagado".
Puede pasar el índice y algunos datos personalizados del objetivo a la función de escucha configurando el conjunto de dataset del objetivo.
let drumPads = document.getElementsByClassName("drum-pads"); function Power(a) { for (let i = 0; i < drumPads.length; i++) { if (a === 'on') { drumPads[i].dataset.index = i; drumPads[i].addEventListener("click", func); } else { drumPads[i].removeEventListener("click", func); } } } function func(e) { const targetIndex = e.currentTarget.dataset.index; console.log('Triggered listner', targetIndex); } <div> <button class="drum-pads">drum-pads 1</button> <button class="drum-pads">drum-pads 2</button> <button class="drum-pads">drum-pads 3</button> <button class="drum-pads">drum-pads 4</button> </div> <div> <button onclick="Power('on')">Toggle On</button> <button onclick="Power('off')">Toggle Off</button> </div>