Autor Zpráva
Ecko
Profil *
Dobry mam script na zobrazovavania menu

<script>
function menuzobraz(idecko){
el=document.getElementById(idecko).style; 
el.display=(el.display == 'block')?'none':'block';
}
</script>


ale ak ho zobrazim a prejdem na inu stranku tak sa zatvori ako docielit ak sa otvori tak aby sa nezavrelo pri zmene podstranky?

Moderátor Chamurappi: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou a s interpunkcí.
fajzen
Profil
Ecko:
stav by sa dal uložiť do cookies a pri načítaní stránky by sa potom z cookies vybral. Neviem, či sa zobrazuje/skrýva celé menu alebo či má menu niekoľko položiek, ktoré majú podpoložky a tie sa zobrazujú/skrývajú.
Skript sa dú použiť pre obe možnosti, aj keď pre prvú možnosť by sa to dalo spraviť jednoduchšie:
<head>
  ...
  <script>
  var pref = 'menu_';

  function menuzobraz(idecko){
    el=document.getElementById(idecko).style; 
    el.display=(el.display == 'block')?'none':'block';
  
    document.cookies = pref + idecko + '=' + el.display + ';';
  }
  
  function init()
  {
    var start = 0, end, el, display;

    while(true) {
        start = document.cookie.indexOf('menu_', start);
        if(start == -1) break;

        start += pref.length;
        end = document.cookie.indexOf('=', start);
        el = document.cookie.substring(start, end);

        start = end + 1;
        end = document.cookie.indexOf(';', start);
        display = document.cookie.substring(start, end);

        if(document.getElementById(el))
            document.getElementById(el).style.display = display;

        start = end + 1;
    }
  }
  </script>
</head>

<body onload="init();">
...
Ecko
Profil *
Nieako mi to nechce ist vlozil som to tam cele ako si dal

takto otvaram menu:
<li id="menu"><a href=# "onClick=menuzobraz("menu1"); return false;">» Online knihy</a></li>';
Ecko
Profil *
A je to iba pre podmenu dalsie podmenu už niesu to "ciastocne menu" je v div a podla toho sa skriva azobrazuje
fajzen
Profil
Ecko:
nerozumiem... bolo by možné sem dať odkaz na živú ukážku alebo aspoň väčší kód toho menu?
Ecko
Profil *
class kategorie {
  var $inc;
  function showKategorie(){
    echo "<div id='menu1' class='nezobraz'><h3><span>K</span>ategorie knih</h3>
    ";
    $this->query=mysql_query("SELECT * FROM kategorie LIMIT 5");
    echo "<ul>
    ";
    while($this->result=mysql_fetch_array($this->query)){    
      echo "<li id='menu'><a href=\"?action=kategoria&k=".$this->result["id"]."\">".$this->result["nazov"]."</a></li>
      ";
    } 
      echo "
      <li id='menu'><a href=\"/?action=kategorie\">Viac kategorii...</a></li>";
    echo "</ul>
    ";   
  }

}

class autori {
  var $inc;
  function showAutori(){
    echo "<h3><span>A</span>utori knih</h3>
    ";
    $this->query=mysql_query("SELECT * FROM autori LIMIT 5");
    echo "<ul>
    ";
    while($this->result=mysql_fetch_array($this->query)){    
      echo "<li id='menu'><a href=\"?action=autor&k=".$this->result["nazov"]."\">".$this->result["nazov"]."</a></li>
      ";
    } 
      echo "
      <li id='menu'><a href=\"/?action=autori\">Viac autorov...</a></li>";
    echo "</ul></div>
    ";   
  }

}


Tu to ams je to proste iba v dive menu1 a ak zobrazujem alebo skrivam pouzivam
<li id="menu"><a href=# "onClick=menuzobraz("menu1"); return false;">» Online knihy</a></li>
fajzen
Profil
Ecko:
noo, jedna chyba je v tom zápise odkazu, na ktorý sa kliká pre zobrazenie/skrytie divu, má byť:
echo '<li id="menu"><a href="#" onClick="menuzobraz(\'menu1\'); return false;">» Online knihy</a></li>';

ak to nie je tým, tak neviem, nemám z tohto ako zistiť, kde je problém... všimol si si, že v tagu body je onload="init();"?
Ecko
Profil *
ano ano všimol no zmenil som to a stale to nefunguje... nevieš prečo?
fajzen
Profil
Ecko:
neviem, skús do funkcie init() niekde na začiatok vložiť
alert(document.cookie);

potom choď na tú stránku, klikni iba na ten odkaz na zobrazenie divu s id="menu1", potom prejdi na ďalšiu stránku a ak sa ti objaví varovné okno a niekde v texte bude menu_menu1=block, tak je chyba niekde inde...

ale najlepšie by bolo, keby si sem mohol dať odkaz na živú ukážku
Ecko
Profil *
Vystraha vyskoci ale v texte nie je ten text cize cookie sa nezapiše ak dobre si myslim?
www.ecko.hostujem.sk
fajzen
Profil
Ecko:
áno

je to moja chyba, ospravedlňujem sa. Vo funkcií menuzobraz() je document.cookies a má byť document.cookie
fajzen
Profil
Ecko:
síce to s tým nesúvisí, ale v hlavičke v metatagoch máš navyše znaky \
Ecko
Profil *
no zmenil som to cokie sa zapiše ale web mrzne a po prejedeni na inu stranku sa aj tak menu zatvori
fajzen
Profil
Ecko:
toto by už malo fungovať:
  function init()
  {
    var start = 0, end, el, display;

    while(true) {
        start = document.cookie.indexOf('menu_', start);
        if(start == -1) break;

        start += pref.length;
        end = document.cookie.indexOf('=', start);
        el = document.cookie.substring(start, end);

        start = end + 1;
        end = document.cookie.indexOf(';', start);
        if(end == -1) end = document.cookie.length;
        display = document.cookie.substring(start, end);

        if(document.getElementById(el))
            document.getElementById(el).style.display = display;

        start = end + 1;
    }
  }
Ecko
Profil *
Ano dakujem ti velmi pekne funguje to ale ako nastavit aby bolo prve skrite menu?
fajzen
Profil
Ecko:
nemáš za čo

ako nastavit aby bolo prve skrite menu
teraz neviem, čo myslíš... aby bol ten div najskôr skrytý? to bude... keď príde návštevník na stránku, bude skrytý, klikne aby sa mu zobrazil, bude zobrazený, prejde na inú stránku, bude zobrazený, zatvorí prehliadač, znovu ho otvorí, pôjde na tvoju stránku a bude skrytý (cookie sa vymaže po zatvorení prehliadača)
Ecko
Profil *
aha máš pravdu skúsil som tu v ie a ide to tak ako som chcel ..:) máš umna pivo :P
fajzen
Profil
Ecko:
:-D super

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: