Autor | Zpráva | ||
---|---|---|---|
Fusion Profil * |
#1 · Zasláno: 26. 9. 2011, 11:58:45
Dobrý den, chtěl bych se zeptat na začátečnický dotaz, týkajíc se logiky zápisu u javascriptu. Jak jsem četl jakpsatweb.cz pořád dokola a dokola, ale stejně nemúžu říct že zápis chápu.
<script> function handle(evnt){ alert("text " + evnt.screenY); } window.onclick = handle; </script> Výsledek je takovej, že když kliknu někde na obrazovce, spustí funkce handle a následne alert, který mi vypíše text a Y polohu kurzoru na stránce. Ovšem proč se vlastnost určuje z prázdné(neboť aspoň se tak domnívám) proměnné evnt? Přitom při akci onClick je zavolána funkce, avšak nejsou vyjádřeny žádné vstupné hodnoty, které by byli přirazeni proměnné evnt. Dle mého pochopení by mněl skript správne fungovat nasledovně, avšak není tomu tak. Také pokud voláme funkci, tak by sme mněli používat zátvorky.. takže taky nechápu proč je prostě napsáno window.onclick = handle; a ne window.onclick = handle(); <script> function handle(){ alert("text " +window.screenY); return true; } window.onclick = handle(); </script> Avšak při takovém zápisu mi vúbec nic nefunguje. Jestli by ste mi někdo mohli vysvětlit jak to vlastně funguje, dost by mi to pomohlo. |
||
_es Profil |
#2 · Zasláno: 26. 9. 2011, 12:10:27 · Upravil/a: _es
Fusion:
„proč se vlastnost určuje z prázdné(neboť aspoň se tak domnívám)“ Domnievaš sa zle, premenná (argument) nadobúda hodnotu po vzniku udalosti. Je tam však nekompatibilita medzi prehliadačmi, IE volá tú funkciu ako funkciu bez argumentov a objekt priradený k udalosti je globálnou premennou event, preto treba tú funkciu upraviť, aby fungovala vo všetkých prehliadačoch. „window.onclick = handle();“ To je nesprávny zápis. |
||
Fusion Profil * |
#3 · Zasláno: 26. 9. 2011, 12:35:54
díky za odpověď. A proč sa nepoužívá přímo event.screenY;?? když je ten samý objekt event přiřazen k proměnné evnt a z té následne pomocí evnt.screenY se pozice získává?
|
||
_es Profil |
#4 · Zasláno: 26. 9. 2011, 13:07:25
Fusion:
„A proč sa nepoužívá přímo event.screenY;??“ Neviem, či celkom rozumiem otázke. To by musela byť zase len vytvorená premenná event - nejaký „priamejší“ než cez premenné prístup nie je. V JS je len jeden špeciálny objekt - this - tomu je v tomto prípade priradený objekt elementu, ku ktorého udalosti je funkcia priradená - v tomto prípade window. |
||
Witiko Profil |
#5 · Zasláno: 26. 9. 2011, 19:47:32 · Upravil/a: Witiko
_es:
Internet Explorer vytvoří v době volání funkce globální proměnnou event .
Prohlížeče konformní se standardy W3C volají funkci ve tvaru funkce.call(element, event) - tzn. funkce má v this element nad kterým byla událost vyvolána a v prvním argumentu daný event . Toto je cross-browser řešení:
function funkce(e) { e = e || event; // Pracujeme s e } Při definici v html není toto nutné ošetřovat. Zápis <element onclick="alert(event.pageX);"> se rovná:
element.onclick = function(event) { alert(event.pageX); }; |
||
Časová prodleva: 13 let
|
0