Dese hacer un menú desplegale y enrrollable, si ya se, hay mucho script por ahí, pero decidí hacer lo más posible por mi cuenta para entender el proceso.
Después de tomar pedazos de otros códigos, analizarlos, modificar, cambiar, cortar, hechar a perder para luego tener que reparar, el script está cási como deseo, sin embargo, aunque funciona sin probelmas en IE en Firefox ni se mosquea el desgraciado
![lloron](http://static.forosdelweb.com/fdwtheme/images/smilies/chillando.png)
La lógica es la siguiente:
1.- Las opciones secundarias de cada opción principal primero estan ocultas utilizando una clase CSS con visibilidad "none".
2.- Al hacer click encima de una de las opciones principales se llama a una función de JavaScript (abrir), que funciona de la siguiente manera:
i. Cierra todas las opciones principales y luego abre la opción "clickeada".
ii. Si la opción "clickeada" esta abierta, la cierra.
Pueden ver la prueba en el siguiente enlace:
www.finred.com.mx/menu/
Se darán cuenta que con IE funciona bien, pero con FF no, ya le he estado dando vueltas y no le busco, agradezaco desde ahora cualquier ayuda.
Saludos.
Todo el código JavaScript y las clases CSS que muestran y ocultan las opciones estan en la misma página, basta con ver el código fuente, de todas formas las pongo continiación:
Clases CSS para mostrar y ocultar:
Cita:
.hidden {
display:none;
}
.show {
display:block;
}
.hidden {
display:none;
}
.show {
display:block;
}
Función abrir:
Cita:
function abrir(nombre) {
//Elemento "clickeado"
elemento = document.getElementById(nombre);
//Si el elemento ya estaba abierto entonces simplemente lo cerramos...
if(elemento.className == "show") {
elemento.className = "hidden";
return false;
} else {
//Si el elemento no estaba abierto entonces cerramos todos y posteriomente lo abrimos...
//Elementos que ocultaremos
elementos = new Array("clase_1","clase_2","clase_3","clase_4");
//Ocultando
for(i=0;i<elementos.length;i++) {
elemento_normal = document.getElementById(elementos[i]);
elemento_normal.className = "hidden";
} //for
//Mostrando el elemento "clickeado"
elemento.className = "show"; //Si estaba oculto entonces se muestra
return false;
} //else
} //function
//Elemento "clickeado"
elemento = document.getElementById(nombre);
//Si el elemento ya estaba abierto entonces simplemente lo cerramos...
if(elemento.className == "show") {
elemento.className = "hidden";
return false;
} else {
//Si el elemento no estaba abierto entonces cerramos todos y posteriomente lo abrimos...
//Elementos que ocultaremos
elementos = new Array("clase_1","clase_2","clase_3","clase_4");
//Ocultando
for(i=0;i<elementos.length;i++) {
elemento_normal = document.getElementById(elementos[i]);
elemento_normal.className = "hidden";
} //for
//Mostrando el elemento "clickeado"
elemento.className = "show"; //Si estaba oculto entonces se muestra
return false;
} //else
} //function
Menú:
Cita:
<a href="#" class="clase_1" onclick="return abrir(this.className);">Elemento uno</a>
<div id="clase_1" class="hidden">
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<!--posicionado-->
</div>
<br>
<a href="#" class="clase_2" onclick="return abrir(this.className);">Elemento dos</a>
<div id="clase_2" class="hidden">
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<!--posicionado-->
</div>
<br>
<a href="#" class="clase_3" onclick="return abrir(this.className);">Elemento tres</a>
<div id="clase_3" class="hidden">
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<!--posicionado-->
</div>
<br>
<a href="#" class="clase_4" onclick="return abrir(this.className);">Elemento cuatro</a>
<div id="clase_4" class="hidden">
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<!--posicionado-->
</div>
<div id="clase_1" class="hidden">
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<!--posicionado-->
</div>
<br>
<a href="#" class="clase_2" onclick="return abrir(this.className);">Elemento dos</a>
<div id="clase_2" class="hidden">
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<!--posicionado-->
</div>
<br>
<a href="#" class="clase_3" onclick="return abrir(this.className);">Elemento tres</a>
<div id="clase_3" class="hidden">
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<!--posicionado-->
</div>
<br>
<a href="#" class="clase_4" onclick="return abrir(this.className);">Elemento cuatro</a>
<div id="clase_4" class="hidden">
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<a href="#">Opcion</a><br>
<!--posicionado-->
</div>