Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Menu desplegable (dropdown)

Estas en el tema de Menu desplegable (dropdown) en el foro de Javascript en Foros del Web. Hola foreros, tengo un problema, quisiera hacer un menu como este , pero con mas dropdowns, no solo con uno y bueno seria cómodo que ...
  #1 (permalink)  
Antiguo 09/08/2016, 06:16
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 13 años, 2 meses
Puntos: 19
Pregunta Menu desplegable (dropdown)

Hola foreros, tengo un problema, quisiera hacer un menu como este, pero con mas dropdowns, no solo con uno y bueno seria cómodo que se hiciera una sola función para todos. Para eso pensé en hacer que cuando presionen el botón se seleccione el elemento adyacente a este y que lo muestre, solo que no logro seleccionar el elemento adyacente...
Este es mi código:

Código HTML:
Ver original
  1. <ul class="w3-navbar">
  2.                     <li class="dropdown-lang w3-dropdown">
  3.                         <a class="dropdown-toogle" href="#">Italiano <i class="fa fa-angle-down" style="margin: 0 2px;"></i></a>
  4.                         <div class="w3-dropdown-content">
  5.                             <a href="#"><i class="icon-user-plus"></i> English</a>
  6.                         </div>
  7.                     </li>
  8.                     <li class="dropdown-notifications w3-dropdown">
  9.                         <a class="dropdown-toogle" href="#"><i class="icon-bubbles4"></i></a>
  10.                         <div class="w3-dropdown-content">
  11.                             <a href="#"><i class="icon-user-plus"></i> Mensajes</a>
  12.                         </div>
  13.                     </li>
  14.                     <li class="dropdown-notifications w3-dropdown">
  15.                         <a class="dropdown-toogle" href="#"><i class="icon-bubbles"></i></a>
  16.                         <div class="w3-dropdown-content">
  17.                             <a href="#"><i class="icon-user-plus"></i> Mensajes</a>
  18.                         </div>
  19.                     </li>
  20.                 </ul>
Código Javascript:
Ver original
  1. function toogleNav(e) {
  2.     "use strict";
  3.     //bloqueamos el evento por defecto
  4.     e.preventDefault();
  5.    
  6.     //Aqui me paro :/
  7.    
  8. }
  9.  
  10.  
  11. function startEvents() {
  12.     "use strict";
  13.    
  14.     var i, btns;
  15.    
  16.     btns = document.getElementsByClassName("dropdown-toogle");
  17.    
  18.     /*jslint plusplus: true */ //Para aceptar ++
  19.     for (i = 0; i < btns.length; i++) {
  20.         btns[i].addEventListener('click', toogleNav, false);
  21.     }
  22. }
  23.  
  24. window.addEventListener('load', startEvents, false);

Se puede hacer de esta forma? porque como alternativa pensaba agregar ids a los elementos que se tienen que visualizar y agregar en un atributo de cada boton el id del elemento que quiero visualizar.

Gracias de antemano

Saludos...

Última edición por ILuzbel; 09/08/2016 a las 06:17 Razón: Corrección de errores
  #2 (permalink)  
Antiguo 09/08/2016, 11:42
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 6 meses
Puntos: 1012
Respuesta: Menu desplegable (dropdown)

el problema te lo creas tu solo al usar el elemento <a> en un contexto en el que no tiene sentido. el evento deberías de asignarselo al elemento <li>. pero si aún así quieres mantenerlo, puedes usar el https://developer.mozilla.org/es/doc...ElementSibling
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 09/08/2016, 13:07
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 13 años, 2 meses
Puntos: 19
Respuesta: Menu desplegable (dropdown)

Cita:
Iniciado por IsaBelM Ver Mensaje
el problema te lo creas tu solo al usar el elemento <a> en un contexto en el que no tiene sentido. el evento deberías de asignarselo al elemento <li>. pero si aún así quieres mantenerlo, puedes usar el https://developer.mozilla.org/es/doc...ElementSibling
Bueno tal vez elegí el problema por ser mas complicado.
Ya he resuelto el problema, pero lo haré como dices para no escribir código de mas. Aquí esta la solución:

Código Javascript:
Ver original
  1. function dropdownNav(e) {
  2.     "use strict";
  3.     //bloqueamos el evento por defecto
  4.     e.preventDefault();
  5.     //definimos variables
  6.     var i, j, c, e, cName;
  7.     //Nombre de la clase del elemento que hay que ocultar
  8.     cName = "w3-dropdown-content";
  9.     //Obtenemos a los hijos del elemento padre
  10.     c = this.parentNode.childNodes;
  11.     //Seleccionamos elementos parecidos que hay que ocultar
  12.     e = document.getElementsByClassName(cName);
  13.     /*jslint plusplus: true */
  14.     for (i = 0; i < c.length; i++) {
  15.         //Seleccionamos el elemento que nos interesa
  16.         if (c[i].nodeName === "DIV") {
  17.             //Mostramos o ocultamos el elemento
  18.             if (c[i].className.indexOf("w3-show") == -1) {
  19.                 //Ocultamos todo
  20.                 for (j = 0; j < e.length; j++) {
  21.                     e[j].className = e[j].className.replace(" w3-show", "");
  22.                 }
  23.                 //Mostramos el elemento interesado
  24.                 c[i].className += " w3-show";
  25.             } else {
  26.                 //Ocultamos todo
  27.                 for (j = 0; j < e.length; j++) {
  28.                     e[j].className = e[j].className.replace(" w3-show", "");
  29.                 }
  30.             }
  31.         }
  32.     }
  33. }

Gracias

Saludos...

Última edición por ILuzbel; 09/08/2016 a las 13:27

Etiquetas: desplegable, dropdown
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:10.