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

Resulta que el método forEach de la clase NodeList no está soportado por Internet Explorer. Supongo que por eso quieres utilizar un bucle for en vez de forEach.

Tienes dos opciones, usar el bucle for que comentas:

Código Javascript:
Ver original
  1. var toggles = document.querySelectorAll('.selector');
  2. var active = null;
  3. function toggleSubmenus (event) {
  4.   var current = event.target;
  5.   var isCurrentActive = current === active;
  6.  
  7.   for(var i = 0; i < toggles.length; i++){
  8.       toggles[i].classList.toggle('visible', toggles[i] === current && !isCurrentActive);
  9.   }
  10.   active = isCurrentActive ? null : current;
  11. }
  12. for(var i = 0; i < toggles.length; i++){
  13.     toggles[i].addEventListener('click', toggleSubmenus);
  14. }

O una opción más elegante, usar un polyfill (y así no necesitas cambiar el código cada vez que aparezca forEach):

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.     toggle.classList.toggle('visible', toggle === current && !isCurrentActive);
  17.   });
  18.   active = isCurrentActive ? null : current;
  19. }
  20. toggles.forEach(function(toggle) {
  21.   toggle.addEventListener('click', toggleSubmenus);
  22. });