Autor | Zpráva | ||
---|---|---|---|
preca1 Profil |
#1 · Zasláno: 25. 8. 2010, 23:53:48 · Upravil/a: preca1
Ahoj,
mam dvě funkce, které by měly skrývat/ukazovat jeden div. Obě se mi zdaj stejný, ale jedna ten div neskrývá/neukazuje. Vysvětlí mi prosím někdo proč? Firebug neukazuje žádnou chybu. <script> function funguje() { var div = document.getElementById("div").style; if (div.display == "none") { document.title = "funguje"; div.display = "block"; } else { document.title = "funguje víc"; div.display = "none"; } } function nefunguje() { var div = document.getElementById("div").style.display; if (div == "none") { document.title = "nefunguje"; div = "block"; } else { document.title = "nefunguje víc"; div = "none"; } } </script> <a href="#" onClick="funguje();">funguje</a> <div id="div"> text ke skrytí </div> <a href="#" onClick="nefunguje();">nefunguje</a> Živá ukázka. To s tim titlem tam mam, abych věděl, jestli se vůbec něco děje. Dík |
||
DoubleThink Profil * |
#2 · Zasláno: 26. 8. 2010, 00:08:53
display je vlastnost objektu style.
Do proměnné div se uloží jen jeho hodnota (string pravděpodobně). Žádná vazba mezi proměnnou a objektem dokumentu nevznikne. |
||
fireball_ Profil |
#3 · Zasláno: 26. 8. 2010, 16:12:42
DoubleThink
Upřesnil bych to :), promiň. --- v prvním příkladu se ti do proměné div uloží reference (odkazová proměnná) na objekt s kterým později můžeš dál pracovat. Toto řešení se často používá při optimalizaci, protože je to taková "zkratka". Nevyhledáváš stále dokola stejný podobjekt. v druhém příkladu se do proměnné div neuložila reference na objekt, ale jen hodnota vlastnosti display (primitivní proměnná). |
||
Witiko Profil |
#4 · Zasláno: 27. 8. 2010, 20:16:21 · Upravil/a: Witiko
Prostý objekt je refenčním datovým typem, proto se proměnné nepřiřadí data, nýbrž pointer alias packa, reference, odkaz, ukazatel na tento objekt. (typeof document.getElementById("div").style == "object")
Atribut display obsahuje data typu String. Se Stringem (ačkoliv jde také o objekt) se v javascriptu zachází jako s základním datovým typem, proto se proměnné přiřadí data, která daný atribut v danou chvíli obsahuje. (typeof document.getElementById("div").style.display == "string") Například Array je v javascriptu referenční datový typ, ale v mnoha jiných jazycích (např. php a jsem si celkem jistý, že i C, C++, Java pokud vím přistupuje k problematice podobným způsobem jako ECMAscript) se stejně jako String chová jako typ základní datový, základním důkazem tohoto tvrzení budiž [] != [] - neporovnávají se data, ale pointery dvou rozdílných instancí Array. Má to své výhody i nevýhody (například kopírování polí v javascriptu nejde vyřešit pomocí pole1 = pole2, opět by se kopíroval pouze pointer na jeden a ten samý objekt, na druhou stranu díky své objektové podstatě je možné zjistit délku pole bez volání metod přes .length atribut a stejně tak možnost předání pointeru a ne jen dat je sama o sobě v mnoha situacích vysvobozením) |
||
Časová prodleva: 14 let
|
0