Autor | Zpráva | ||
---|---|---|---|
Camo Profil |
#1 · Zasláno: 29. 12. 2011, 12:09:39 · Upravil/a: Camo
Vitajte!
Potreboval by som testovať takýto kód: if(neexistujucaPremenna){ ... } else{ ... } |
||
Radek9 Profil |
Camo:
„Nefungovalo mi ani =="undefined"“ Ty se snažíš totiž porovnávat undefined (primitivní hodnotu proměnné) a "undefined" (textový řetězec). K ověřování takovéto proměnné se používá operátor typeof: if(typeof nejakaPromenna=="undefined"){ alert("Proměnná není definována."); } |
||
mag123 Profil * |
#3 · Zasláno: 29. 12. 2011, 12:15:48
if (typeof promenna == "undefined") {... // neexistuje }
else {... // existuje } |
||
Camo Profil |
#4 · Zasláno: 29. 12. 2011, 12:52:12
Dík, toto som potreboval.
|
||
Nox Profil |
#5 · Zasláno: 29. 12. 2011, 14:40:59 · Upravil/a: Nox
Pokud máš zajištěno, že undefined má správnou hodnotu (viz např. obalovací kód jQuery), pak můžeš použít i
if( nejakaPromenna === undefined ) |
||
Radek9 Profil |
Nox:
To ale nejde u proměnných, které nebyly definovány pomocí varu (popřípadě jako parametr funkce), hodí to error. |
||
Chamurappi Profil |
#7 · Zasláno: 29. 12. 2011, 15:02:42
Reaguji na Noxe:
Nemůže. Jakýkoliv pokus o čtení neexistující proměnné vyvolá výjimku. |
||
_es Profil |
mag123:
> if (typeof promenna == "undefined") {... // neexistuje } > else {... // existuje } Tým sa testuje, či premenná existuje a súčasne nemá hodnotu undefined . Teda existujúcu premennú s hodnotou undefined to vyhodnotí nesprávne. Existencia premennej sa dá otestovať:
try{nejakaPremenna; alert("premenná existuje")}catch(e){alert("premenná neexistuje")} |
||
Camo Profil |
#9 · Zasláno: 31. 12. 2011, 11:46:12
_es:
Díky za obšírny popis problému. |
||
Nox Profil |
#10 · Zasláno: 31. 12. 2011, 16:04:29
Radek9, Chamurappi:
díky za opravu _es: předpokládám, že toto nejde nijak zapouzdřit, jelikož by se musela nějak předat ta proměnná a to samo o sobě by hodilo chybu ... je to tak? (napadá mě možná jen pomocí té funkce, jejíž název se nevyslovuje) |
||
_es Profil |
Nox:
„předpokládám, že toto nejde nijak zapouzdřit“ Do jednej funkcie asi nie, možno niečo v tvare: eval(f("premenná")) f by vrátila reťazec podobný príkazom v [#8].
No inak je testovanie existencie lokálnej premennej asi znakom zle navrhnutej aplikácie. Zmysel má možno tak testovanie existencie globálnych premenných, definovaných iným skriptom, tie sa dajú jednoducho otestovať: "premenná" in window |
||
peta Profil |
#12 · Zasláno: 2. 1. 2012, 13:22:27 · Upravil/a: peta
window["premenná"] misto eval?
|
||
Chamurappi Profil |
#13 · Zasláno: 2. 1. 2012, 13:36:46
Reaguji na peta:
Tím nerozlišíš neexistující proměnnou od nenaplněné (+ viz [#11], nelze použít všude). |
||
Camo Profil |
#14 · Zasláno: 2. 1. 2012, 17:40:31
Ja som to pužil na testovanie IE6/7. Takto som ju nastavil:
<!--[if lt IE 8]> <script type="text/javascript"> var isIE76=true; </script> <![endif]--> Alebo sa to dalo riešiť lepšie? |
||
Radek9 Profil |
#15 · Zasláno: 3. 1. 2012, 10:55:24
Camo:
Zkus scrollovat přímo window. Tam by problém být neměl. |
||
Nox Profil |
#16 · Zasláno: 3. 1. 2012, 11:01:50
Camo:
Obecně vídám doporučené spíš testovat jednotlivé vlastnosti, než browsery ... tzn. jako (jen příklad) var scroll = body.scroll || window.scroll; |
||
Camo Profil |
#17 · Zasláno: 4. 1. 2012, 10:11:30
Radek9:
Díky moc, vymenil som window.scrollTo a body.scrollTop za window.scroll. Ale celá táto vec sa týka skrytia/odkrytia scrollovacej lišty. To som riešil cez html/body.style.overflow="hidden/auto". Na to som potreboval vedieť čo sa scrolluje. Ale ak by existovalo nejaké univerzálne riešenie, tak neprotestujem. |
||
Chamurappi Profil |
#18 · Zasláno: 4. 1. 2012, 11:02:00
Reaguji na Cama:
„Väčšina browserov má scrolovanie na BODY, ale IE6/7 na HTML....“ Vážně? Tomu se mi skoro nechce věřit. Matně si vzpomínám, že Explorerové v quirku rolují <body> a že ve všech ostatních případech vládne <html> …
„vymenil som window.scrollTo a body.scrollTop za window.scroll“ window.scroll existuje? Vím jen o window.scrollTo a window.scrollBy .
„Na to som potreboval vedieť čo sa scrolluje.“ Proč? Nestačí nastavit oba overflow stejně?
|
||
Camo Profil |
#19 · Zasláno: 4. 1. 2012, 19:00:53 · Upravil/a: Camo
Chamurappi:
"window.scroll existuje?" Zjavne áno a to vo väčšine browserov. Ale keď som skúšal nájsť nejaký odkaz na W3C a pod. tak som nenašiel. Čo teraz??? "Vážně? Tomu se mi skoro nechce věřit." Skúšal som to vo FF, O, Saf, Ch, IE8,7,6. Je to väčšina? Ale asi mi chcete naznačiť, že by som mal skúsiť prehodiť to na html. To som vlastne neskúšal, lebo som kód začal písať s tým, že to bude logicky body a to HTML som začal riešiť až keď sa objavil problém... No teraz vidím, že som nepojedol všetku múdrosť sveta. "Proč? Nestačí nastavit oba overflow stejně?" Nie IE zobrazí obidva posuvníky a tie sa bijú medzi sebou... |
||
Časová prodleva: 11 let
|
0