JavaScript Navigation... Schließen?

  • JavaScript Navigation... Schließen?

    Hab ein kleines Problem mit meiner JS-Navigation... Immer wenn ich auf die Unternemü-Links klicke, klappt mein Menü wieder zu... Es soll aber nur zuklappen, wenn man auf den Hauptpunkt klickt ;) Ich find nur den Fehler nicht...

    Hier ist der Quelltext... Da könnt ihr genau sehen was ich meine :)

    Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    2. <html>
    3. <head>
    4. <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    5. <meta http-equiv="content-script-type" content="text/javascript">
    6. <meta http-equiv="content-style-type" content="text/css">
    7. <title>TeeshopNavi</title>
    8. <style type="text/css" media="screen">
    9. <!--
    10. body
    11. { background: #DFFFD2;
    12. font-size: 0.8em;
    13. font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif, Monotype Corsiva;
    14. overflow: auto;
    15. padding: 10px;
    16. margin: 0px;
    17. }
    18. #menu, #menu ul
    19. {
    20. padding: 0px;
    21. margin: 0px;
    22. }
    23. #menu li
    24. {
    25. list-style-type: none;
    26. cursor: pointer;
    27. line-height: 25px;
    28. text-align: center;
    29. border: 1px solid #666;
    30. background: #99FF99;
    31. display: block;
    32. color: #000;
    33. text-decoration:none;
    34. }
    35. #menu a
    36. {
    37. background: #DFFFD2;
    38. text-decoration: none;
    39. font-weight: normal;
    40. padding-left: 10px;
    41. display: block;
    42. }
    43. //-->
    44. </style>
    45. <script type="text/javascript">
    46. <!--
    47. function hideSub()
    48. {
    49. if (!document.getElementsByTagName)
    50. return;
    51. var mnu = document.getElementById('menu');
    52. var toplis = mnu.getElementsByTagName('li');
    53. for (var it = 0; it < toplis.length; it++)
    54. {
    55. var sublis = toplis[it].getElementsByTagName('li');
    56. for (var is = 0; is < sublis.length; is++)
    57. if (sublis[is].style)
    58. sublis[is].style.display = (toplis[it].className == 'show') ? 'block' : 'none';
    59. }
    60. }
    61. function mShow(Me)
    62. {
    63. if (!Me.getElementsByTagName)
    64. return;
    65. var mylis = Me.getElementsByTagName('li');
    66. if (!mylis)
    67. return;
    68. for (j = 0; j < mylis.length; j++)
    69. mylis[j].style.display = (mylis[j].style.display == 'block') ? 'none' : 'block';
    70. }
    71. //-->
    72. </script>
    73. </head>
    74. <body onload="hideSub();">
    75. <ul id="menu">
    76. <li class="show" onclick="mShow(this);">Home
    77. <ul>
    78. <li><a href="#">Start und son Scheiß halt... :)</a></li>
    79. </ul>
    80. </li>
    81. <li onclick="mShow(this);">Asiatischer Tee
    82. <ul>
    83. <li><a href="#">Tee1</a></li>
    84. <li><a href="#">Tee2</a></li>
    85. <li><a href="#">Tee3</a></li>
    86. </ul>
    87. </li>
    88. <li onclick="mShow(this);">Europäischer Tee
    89. <ul>
    90. <li><a href="#">Tee1</a></li>
    91. <li><a href="#">Tee2</a></li>
    92. <li><a href="#">Tee3</a></li>
    93. </ul>
    94. </li>
    95. <li onclick="mShow(this);">Zubehör
    96. <ul>
    97. <li><a href="#">Freakzeugs</a></li>
    98. <li><a href="#">Teegedöhns</a></li>
    99. <li><a href="#">etc</a></li>
    100. </ul>
    101. </li>
    102. </ul>
    103. </body>
    104. </html>
    Alles anzeigen


    Danke im Vorraus ;)

    MfG

    Marcel
  • hi,

    stehen die links so bei dir im code mit # als href?

    mit #irgendein_id_name springt man normalerweise zu ankern.

    da sich die url bei klick auf einen dieser links verändern sollte (raute wird angehängt)
    sollte sich die seite eigentlich neu laden. und da du ja die funktion hideSubs im body onload stehen hast, werden die subs geschlossen....


    mfg da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • Hallo,

    würde sagen, das ist mehr ein HTML-Problem, da Du Deine Listen verschachtelt hast:

    Quellcode

    1. <li onclick="mShow(this);">Asiatischer Tee
    2. <ul>
    3. <li><a href="#">Tee1</a></li>
    4. <li><a href="#">Tee2</a></li>
    5. <li><a href="#">Tee3</a></li>
    6. </ul>
    7. </li>


    Der Click Event liegt ja auf dem gesamten äußeren <li>, also auch z.B. auf "Tee1".

    Probiers mal so:

    Quellcode

    1. <li><span onclick="mShow(this)" style="cursor: pointer">Asiatischer Tee</span>
    2. <ul>
    3. <li><a href="#">Tee1</a></li>
    4. <li><a href="#">Tee2</a></li>
    5. <li><a href="#">Tee3</a></li>
    6. </ul>
    7. </li>


    70abc
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan
  • Das Problem in deinem Script ist, dass das ganze <li> Element klickbar ist und das Untermenü Teil dieses Elements ist.

    Quellcode

    1. <li onclick="mShow(this);">Teil von LI
    2. <ul>
    3. <li>Teil von LI</li>
    4. <li>Teil von LI</li>
    5. </ul>
    6. </li>


    So sollte es gehen

    Quellcode

    1. <li><a href="#" onclick="mShow(this);">Teil von LI</a>
    2. <ul>
    3. <li>Teil von LI</li>
    4. <li>Teil von LI</li>
    5. </ul>
    6. </li>


    Damit das aussehen gleich bleibt, kannst du das <a> mit CSS gestalten
    z.B. display:block;width:100%;
  • Also bei beiden varianten schließt er aber die Hauptmenüpunkte nicht mehr, wenn ich sie anklicke... Sie sollen ja noch schließbar sein. Mich nervts halt nur, dass wenn man auf nem Untermenüpunkt geklickt hat sich auch der Hauptpunkt wieder zuklappte.. Das ist auf dauer Nervig wenn man durch die Warenkörbe navigieren will ;)
  • "One" schrieb:

    Also bei beiden varianten schließt er aber die Hauptmenüpunkte nicht mehr, wenn ich sie anklicke... Sie sollen ja noch schließbar sein. Mich nervts halt nur, dass wenn man auf nem Untermenüpunkt geklickt hat sich auch der Hauptpunkt wieder zuklappte.. Das ist auf dauer Nervig wenn man durch die Warenkörbe navigieren will ;)


    Mh, ja , klar, weil "this" jetzt nicht mehr das "<li>" Element ist...

    Quellcode

    1. <li><span onclick="mShow(this.parent)" style="cursor: pointer">Asiatischer Tee</span>
    2. <ul>
    3. <li><a href="#">Tee1</a></li>
    4. <li><a href="#">Tee2</a></li>
    5. <li><a href="#">Tee3</a></li>
    6. </ul>
    7. </li>


    Keine Ahnung ob "this.parent" wirklich funktioniert, falls nicht, würde ich Ids vergeben:

    Quellcode

    1. <li id="linkGroup2"><span onclick="mShow(document.getElementById('linkGroup2'))" style="cursor: pointer">Asiatischer Tee</span>
    2. <ul>
    3. <li><a href="#">Tee1</a></li>
    4. <li><a href="#">Tee2</a></li>
    5. <li><a href="#">Tee3</a></li>
    6. </ul>
    7. </li>


    Wäre halt nicht so elegant, weil Du die Id "linkGroup2" für jede LinkGruppe anpassen müsstest...

    70abc
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan