Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Firefox a JavaScript

Ano, Firefox je opravdu asi nejlepší prohlížeč, zabezpečení a dodržování standardů na úrovni (narozdíl od IE), ale nějak nevím proč v něm nefunguje tohle:
neco.style.display = "block"

Chápu, asi to není správně, ale tohle:
document.getElementById("neco").style.displ ay = "block"
nefungovalo jak ve Firefoxu, tak v IE a Opeře (narozdíl od předchozího řešení).

Zkoušel jsem i if ( document.getElementById ) document.getElementById("neco")..., avšak opět žádný výsledek. Konzola javascriptu - neco is not defined. Javascript je sice opravdu na ho... - www.tvorba-webu.cz/javascript/javascript_je_na_hovn o.php, ale vysouvací menu asi jinak neuděláte.

Díky

Předmět Autor Datum
K elementom sa pristupuje vždy cez document.getElementById, nie priamo cez id (teda ak chceš, aby to…
los 10.09.2006 11:55
los
Během pár dnů pošlu adresu kde to bude...díky moc
Kuncek 11.09.2006 17:39
Kuncek
tak teda zde: vadne Přes js moc znalý nejsem... tak každá rada dobrá. Nestihl jsem to nijak nachyst…
Kuncek 11.09.2006 19:39
Kuncek
Hlavu vzhůru. Pracuješ tam s nedefinovanými proměnnými. To je celý problém. Sleduji, vypadá, že špa…
Flash_Gordon 11.09.2006 19:51
Flash_Gordon
Nema nahodou to "DivID" byt bez uvodzoviek, nie je to premenna? (P.S. mam na mysli v tom subore menu…
MM.. 11.09.2006 20:03
MM..
Najjednoduchšie pre túto chvíľu je opraviť chyby, ktoré tam sú. Z dlhodobého pohľadu by bolo lepšie… poslední
los 11.09.2006 20:19
los

K elementom sa pristupuje vždy cez document.getElementById, nie priamo cez id (teda ak chceš, aby to fungovalo v normálnych prehliadačoch). Je na tej stránke element, ktorý ma nastavený atribút id="neco"? Keď to nastavuješ, je už ten element nahraný? Chcelo by to odkaz na stránky, kde to nefunguje...

Vysúvacie menu sa dá spraviť s použitím CSS, pričom pre IE sa použije expression alebo behavior.

JavaScript je na hovno pre tých, ktorí ho neovládajú ;-).

edit: Keď si zmenil ten kód na document.getElementById, tak v konzole nemohlo byť "neco is not defined" - načítal sa zmenený kód? Ak nie, tak daj Ctrl+F5.

Hlavu vzhůru. Pracuješ tam s nedefinovanými proměnnými.
To je celý problém.

Sleduji, vypadá, že špatně se snažíš přistupovat k prvkům právě přes to ID jak naznačil výše los.

ldm_leas není nikde definovaná proměnná.
ldm_leas je pouze identifikátor na který jsi zapomněl a zaměnil jej za proměnnou (vypadá to tak).

Protože ldm_leas identifikuje celý odstaveček (div) nemusíš zakrývat jeho podprvky. Stačí pokud tomuto prvku
nastavíš invisible = "none" a on už si zakryje všechny své "podprvky".
Tedy pokud nechceš výběrově skrývat jen některé jeho podprvky :)).

Najjednoduchšie pre túto chvíľu je opraviť chyby, ktoré tam sú. Z dlhodobého pohľadu by bolo lepšie premyslieť a napísať celé menu odznova.

K elementu, ktorého id je v premennej elementId sa nepristupuje takto:

document.getElementById ("elementId")

ale má to byť takto:

document.getElementById (elementId)

Naopak, keď posielaš id do funkcie ako reťazec, tak ten má byť v úvodzovkách. V HTML kóde musíš prepísať volanie showMenu tak, aby bol prvý a tretí argument v úvodzovkách nejako takto:

showMenu('ldm_uver',0,'aldm2')

Máš tam premennú divID, ktorá je globálna a nemusela by tam byť. Asi si tým chcel riešiť poslanie argumentu do funkcie volanú cez setTimeout, ale to sa dá spraviť jednoduchšie tak, že ten argument pošleš ako tretí argument priamo do funkcie setTimeout. Všetky ďalšie argument funkcie setTimeout sa totiž pošlú funkcii, ktorú setTimeout volá. Čiže napr. funkciu showMenu by som prepísal takto:

function showMenu (divId, isAnchor, anchorId)
{
  clearTimeout (timer); // menu se neskryje

  if (isAnchor)
  {
    var div = document.getElementById (divId);

    aHoverBackNone (); // zrusi pozadi odkazu

    if (div.style.display != "block")
    {
      hideAll (); // skryje ostatni menu, pak zobrazi aktualni
      timerShow = setTimeout(showOne, 300, div); // mys presla na odkaz
    }
  }
  else
    aHoverBack (document.getElementById (anchorId)); // hover odkazu i kdyz jsem ve vys. menu
}

function showOne (div)
{
  div.style.display = "block";
}

edit: teraz vidím, že pomocou toho globálneho divID ošetruješ ešte aj niečo iné, takže aby bol tento kód ekvivalentný tomu Tvojmu, tak ten div v riadku "var div = ..." bude predsa len globálnou premennou.

Inicializuješ polia dosť krkolomným spôsobom, pritom môžeš použiť lepší zápis.

function hideAll ()
{
  var menuArray = ["ldm_leas", "ldm_uver", "bdm_leas", "bdm_uver"];

  for (var i = 0; i < menuArray.length; ++i) // projde pole a vsechna menu skryje
    document.getElementById (menuArray [i]).style.display = "none";
}

Ja by som to ale ani takto nerobil, pretože pri zmene menu budeš musieť meniť aj JavaScript.

Zpět do poradny Odpovědět na původní otázku Nahoru