Foros del Web » Programando para Internet » Javascript »

Problema con submenús que no se muestran

Estas en el tema de Problema con submenús que no se muestran en el foro de Javascript en Foros del Web. Buenas. Tengo menús del tipo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original < div class = "botoneslink" >     < div onclick = "ehandler(event,menuitem1);" class ...
  #1 (permalink)  
Antiguo 28/02/2012, 18:39
 
Fecha de Ingreso: julio-2009
Mensajes: 36
Antigüedad: 10 años, 6 meses
Puntos: 0
Problema con submenús que no se muestran

Buenas.

Tengo menús del tipo:
Código HTML:
Ver original
  1. <div class="botoneslink">
  2.    <div onclick="ehandler(event,menuitem1);" class="boton">
  3.       <a class="glink" id="boton1">
  4.          <img width="66" height="66" src="web_archives/img/botones/botones/01.png">
  5.       </a>
  6.    </div>
  7. </div>

Al pulsar se ejecuta la función ehandler (que copié de otro lugar) para abrir los submenús.
Código Javascript:
Ver original
  1. var time = 3000;
  2. var numofitems = <?php echo $menus; ?>;
  3. //menu constructor
  4. function menu(allitems,thisitem,startstate){
  5.   divname="subglobal"+thisitem;  
  6.   this.numberofmenuitems = allitems;
  7.   this.thediv = document.getElementById(divname);
  8.   this.thediv.style.visibility = startstate;
  9. }
  10. //menu methods
  11. function ehandler(event,theobj){
  12.   for (var i=1; i<= theobj.numberofmenuitems; i++){
  13.     var shutdiv =eval( "menuitem"+i+".thediv");
  14.     shutdiv.style.visibility="hidden";
  15.   }
  16.   theobj.thediv.style.visibility="visible";
  17. }
  18. function closesubnav(event){
  19.   if ((event.clientY <48)||(event.clientY > 107)){
  20.     for (var i=1; i<= numofitems; i++){
  21.       var shutdiv =eval('menuitem'+i+'.thediv');
  22.       shutdiv.style.visibility='hidden';
  23.     }
  24.   }
  25. }

Al final de la página tengo este otro script para que los submenús inicialmente estén ocultos:
Código Javascript:
Ver original
  1. <?php
  2. for ($i=1;$i<=$menus;$i++)
  3. { echo 'var menuitem'.$i.' = new menu('.$menus.','.$i.',"hidden");'; echo "\n";}
  4. ?>

Y construyo los submenús con php:
Código PHP:
Ver original
  1. for ($c=1;$c<=$menus;$c++)
  2. {
  3.     $sbm='sbmenu'.$c;
  4.     $sbmenu=$$sbm;
  5.     $d=0;
  6.     echo '<div id="subglobal'.$c.'" class="subglobalNav">'; echo "\n";
  7.     for ($u=1;$u<=$sbmenu;$u++)
  8.         {   $n_link=$c.$d.$u; urls_amigables($n_link); list ($link, $path) = urls_amigables($n_link);
  9.         echo '<span class="subgloballink"><a id="sboton'.$c.$u.'" class="sglink" href=""><img src="subbotones/sb'.$c.'/'.$u.'.gif" alt="'.$link.'" title="'.$link.'" /></a></span>'; echo "\n";
  10.         }
  11.     echo "</div>\n";
  12. }
Los submenús se construyen perfectamente. E inicialmente están ocultos. Pero al pulsar sobre el menú debería pasar de style="visibility: hidden;" a style="visibility: visible;" y eso no pasa.

Lo curioso es que si para construir los submenús utilizo este código sí que funciona perfectamente:
Código PHP:
Ver original
  1. <?php
  2. for ($c=1;$c<=$menus;$c++) {
  3.     $sbm='sbmenu'.$c;
  4.     $sbmenu=$$sbm;
  5.     $d=0;
  6. ?>
  7. <script type="text/javascript">
  8. var n=0
  9. function hazSubFila<?php echo $c; ?>CSS()
  10. {   var tx = '<div id="subglobal<?php echo $c; ?>" class="subglobalNav">'
  11.     for (i=1;i<=<?php echo $sbmenu; ?>;i++)
  12.    
  13.     {   tx += '<span class="subgloballink"><a id="sboton<?php echo $c; ?>'+i+'" class="sglink" href=""><img src="subbotones/sb<?php echo $c; ?>/'+i+'.gif" alt="" title="" /></a></span>'
  14.     }
  15.     tx += '</div>'
  16.     document.writeln(tx)  
  17. }
  18. hazSubFila<?php echo $c; ?>CSS()
  19. </script>
  20. <?php } ?>
El problema es que al hacer los submenús con javascript no puedo rellenar las etiquetas alt y title con php. Por eso no me sirve este código.

Lo curioso del caso es que, en el último código que he puesto, al quitar la línea var n=0 los sumbenús dejan de mostrarse y se comportan exactamente como en el caso anterior.

Así que necesito una ayuda para poder terminar de hacer visibles estos submenús y poder rellenar las etiquetas alt y title.

Gracias por anticipado.
  #2 (permalink)  
Antiguo 29/02/2012, 17:22
 
Fecha de Ingreso: julio-2009
Mensajes: 36
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Problema con submenús que no se muestran

Bueno, he encontrado una solución, quizá poco elegante, pero que me funciona. La dejo por si a alguien le sirve alguna vez:
Código PHP:
Ver original
  1. <?php
  2. for ($c=1;$c<=$menus;$c++)
  3. {
  4.     $sbm='sbmenu'.$c;
  5.     $sbmenu=$$sbm;
  6.     $d=0;
  7.     echo '<div id="subglobal'.$c.'" class="subglobalNav">'; echo "\n";
  8.     for ($u=1;$u<=$sbmenu;$u++)
  9.         {   $n_link=$c.$d.$u; urls_amigables($n_link); list ($link, $path) = urls_amigables($n_link);
  10. ?>
  11. <script type="text/javascript">
  12. var n=0
  13. function hazSubFila<?php echo $c.$d.$u; ?>CSS()
  14. {
  15.     tx = '<span class="subgloballink"><a id="sboton<?php echo $c.$u; ?>" class="sglink" href=""><img src="subbotones/sb<?php echo $c; ?>/<?php echo $u; ?>.gif" height="36" alt="<?php echo $link; ?>" title="<?php echo $link; ?>" /></a></span>'
  16.     document.writeln(tx)  
  17. }
  18. hazSubFila<?php echo $c.$d.$u; ?>CSS()
  19. </script>
  20. <?php
  21.         }
  22.     echo "</div>\n";
  23. ?>
  24. <script type="text/javascript">
  25. function eligesub<?php echo $c; ?>CSS(j)
  26. {   for (c=1;c<=<?php echo $menus; ?>;c++)
  27.         {for (u=1;u<=<?php echo $maxsubmenus; ?>;u++)
  28.             {
  29.             var celda=document.getElementById('sboton'+c+u)
  30.                 if (c==<?php echo $c; ?> && u==j) celda.className="sglinkact"
  31.                 else celda.className="sglink"
  32.             }
  33.         }
  34. }
  35. </script>
  36. <?php } ?>

Un saludo.

Etiquetas: funcion, muestran, php, botones
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 16:55.