Autor Zpráva
T-fon
Profil
Dobrý den, chtěl bych vás poprosit o pomoc s úpravou jQuery rozbalovacího menu. Přiznám se, že vzhledem k tomu, že se nyní učím hlavně PHP a MySQL, tak mi na JQuery nezbývá čas a proto jsem jen našel a obšlehnul kód, který jsem si přidal do stránek:
$(document).ready(function ()
{ 
  $(".navigace ul li").bind("mouseenter", function() {
    $(this).children("ul").css("top", "30").slideDown("slow");
  });      
  $(".navigace ul li").bind("mouseleave", function() {
    $(this).children("ul").stop(true, true).slideUp("slow");
  });
});
Na těchto stránkách ho používám k rozbalování menu výlety. Když kliknu na odkaz, metodou GET se mi předá název souboru, který se includuje do index.php. A já bych ten jQuery skript chtěl upravit tak, aby když kliknu na některou položku výletů, aby mi toto menu zůstalo zobrazené(rozbalené). V css mám:
.navigace ul li ul
{ display: none}
Nechci být línej a nechat si od vás ten kód napsat, takže aby byla vidět moje snaha po tom sám pátrat: napadlo mě na začátek jQuery scriptu vytvořit proměnnou, která by z metody GET zjistila, na jakou stránku jsem kliknul, něco jako:
var stranka = "<?php echo substr($_GET['page'],0,6) ?>";
Šlo by to takhle udělat? substr tam mám proto, aby se mi do proměnné vložilo slovo "výlety". A pak do toho jQuery scriptu dát nějakou podmínku (a teď opravdu moc netušim):
if (stranka=="výlety")
{
  $(".navigace ul li ul").css("display":"block")
}
a pak by bylo else a ten původní kód...
Já doufám, že se z tohoto textu dá pochopit, o co mi jde a předem děkuji za jakoukoliv radu a pomoc.
hexcross
Profil
Pokud tedy jde o to že chceš udělat aby to menu zůstalo rozbalené, bude určitě lepší to vyřešit přes PHP než přes JavaScript.

V PHP to ověříš tak že porovnáš aktuální obsah proměnné $_GET['page'] s aktuální položkou které potom přidáš nějakou classu (třeba open - tímto vyřešíš označení aktuálně otevřené položky ale nikoliv to rozbalení.

U "rozbalení" budeš postupovat podobně - u nadřazené položky menu vytvoříš buď podmínky nebo ideálně jednu funkci která by ti měla ověřit toto zda aktuální položka je aktivní a zároveň součástí toho rodičovského prvku :)

Počítám že to menu máš uložené v DB...
T-fon
Profil
Upřímě řečeno z toho vůbec nejsem moudrý. Menu nemám uložené v DB, je to normální seznam napsaný v HTML. Ja myslím že vím, jak bych pomocí PHP udělal 2 menu (jedno rozbalené, druhé ne), ale vůbec netuším, jak bych to pak propojil s tou funkcí jQuery (s tim efektem rozbalování). Protože v tomhle případě bych pak ten javascrip musel dát stejně do nějaké podmínky, aby se vykonal jen v případě, že nebudu v sekci výlety...
hexcross
Profil
Ok tak to mění situaci :) pokud by jsi si to tahal z DB bylo by lepší to ověřovat přes PHP.

Takhle ti stačí přidat jednu podmínku která najde prvek co má ID aktivní (v tvém případě odkaz) a najde nadřazené ULko kterému dá vlastnost display:block takže takto :
    if($("#aktivni").length!=0){
      $("#aktivni").parent().parent().css("display","block");
    }
T-fon
Profil
Děkuji, částečně to funguje, umístil jsem to na stránky, problém je ovšem v tom, že když kliknu na položku výlety20xx a z menu sjedu myší, tak se asi aktivuje ta funkce "mouseleave" a menu se zaroluje. Při opětovém načtení stránky už to vypadá přesně jak bych chtěl. Dalo by se ještě toto nějak vyřešit?
hexcross
Profil
Zkus tohle, ale bude to funkční jenom pokud tam budeš mít jedno výsuvný menu. V případě víc menu by bylo lepší to předělat na toggle. Není to žádná sláva ale funguje to :)
    if($("#aktivni").length){
      $("#aktivni").parent().parent().css("display","block");
    }
    else{
      $(".navigace ul li").bind("mouseenter", function() {
        $(this).children("ul").slideDown("slow");
      });      
      $(".navigace ul li").bind("mouseleave", function() {
        $(this).children("ul").slideUp("slow");
      }); 
    } 
T-fon
Profil
paráda, tohle funguje přesně jak má, díky moc
Chamurappi
Profil
Reaguji na T-fona:
Nastavovat ten display: block skriptem je hloupost, proč ho nenastavíš v CSS?
Jak se dostanu do podmenu s vypnutým JavaScriptem?
hexcross
Profil
Chamurappi:
Nedostaneš :D bez JavaScriptu to je nepoužitelný a bez použití PHP zase nereálný.
_es
Profil
hexcross:
bez JavaScriptu to je nepoužitelný
Zrejme si nepochopil, že [#8] je rada na odstránenie tejto chyby.

bez použití PHP zase nereálný
Návštevníkovi je predsa jedno, ako server vyrobí dáta.
hexcross
Profil
_es:
Pochopil, ale z tohodle vlákna vyplívá že struktura menu je vytvořena staticky a bez dalších hodnot určujících co je rodič a co není (teda přes nějakou PHP + mySQL) strukturu menu to je nemožné. Aspoň tak jsem to pochopil teda..

Edit: Vlastně plácám hlouposti, stačilo by u aktivní položky odchytit přes PHP zda se hodnota z $_GET[page] shoduje s tou toho prvku a pak tomu <li> přiřadit patřičnou classu. Pak by to šlo vyřešit přes CSS.
_es
Profil
hexcross:
to je nemožné
Čo je nemožné? Aby sa návštevníkom bez JS podmenu zobrazilo „napevno“ a návštevníkom s JS až po vyžiadaní cez myš?
hexcross
Profil
_es:
Viz. edit, jasně že to jde :)
T-fon
Profil
_es:
Aby sa návštevníkom bez JS podmenu zobrazilo ‚napevno‘ a návštevníkom s JS až po vyžiadaní cez myš?
to znamená, že bych měl mít někde nějakou podmínku, kde by se zjistilo, jestli návštěvník nemá zakázané JS? můžete mi prosím poradit konkretněji?
_es
Profil
T-fon:
to znamená, že bych měl mít někde nějakou podmínku, kde by se zjistilo, jestli návštěvník nemá zakázané JS?
Buď použiješ značku noscript, alebo JS nejako zabezpečí, že bude menu schované.
T-fon
Profil
_es:
Buď použiješ značku noscript
no ale tam se píše, že IE jí ignoruje, i když ma vypnuté JS, kdežto Mozila jí provede. Takže bych mel mít asi display: block v CSS a pomocí JS to nějak schovat, že? Jsem v JS úplný začátačník, šlo by to tedy udělat tak, že bych použil ten script od hexcrosse a jen před tu první podmínku napsal: $("#aktivni").parent().parent().css("display","none");
T-fon
Profil
Tak bohužel se mi stále nepodařilo vyřešit, jak schovat menu se zapnutým javascriptem a naopak. Přes značku noscript to nefunguje a v JS jsem vymýšlel různé příkazy, ale nepovedlo se. Nebyl by tu někdo ochotný poradit?

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: