Ver Mensaje Individual
  #6 (permalink)  
Antiguo 07/11/2019, 07:25
prueba230683
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Intentando cambiar "foreach" por "for"

Si miras la tabla de compatibilidad del método toggle:

https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/toggle#Browser_compatibility

Verás que IE11 no soporta el segundo parámetro de dicho método, por eso no funciona bien.
La solución es simular la funcionalidad de este parámetro, es decir, si la expresión toggle === current && !isCurrentActive es true, se añade la clase con .add, y si es false, se elimina la clase con .remove:

Código Javascript:
Ver original
  1. // Polyfill:
  2.  
  3. if (window.NodeList && !NodeList.prototype.forEach) {
  4.     NodeList.prototype.forEach = Array.prototype.forEach;
  5. }
  6.  
  7. // Debajo pones el resto de tu codigo en el que usas forEach:
  8.  
  9. var toggles = document.querySelectorAll('.selector');
  10. var active = null;
  11. function toggleSubmenus (event) {
  12.   var current = event.target;
  13.   var isCurrentActive = current === active;
  14.  
  15.   toggles.forEach(function (toggle) {
  16.     if(toggle === current && !isCurrentActive){
  17.       toggle.classList.add('visible');
  18.     }else{
  19.       toggle.classList.remove('visible');
  20.     }
  21.   });
  22.   active = isCurrentActive ? null : current;
  23. }
  24. toggles.forEach(function(toggle) {
  25.   toggle.addEventListener('click', toggleSubmenus);
  26. });

De esta forma consigues el mismo efecto, pero ahora debería funcionar en IE11.


Ojalá algún día deje de existir IE