Autor | Zpráva | ||
---|---|---|---|
joe Profil |
#1 · Zasláno: 12. 7. 2008, 19:29:58
Ahoj,
doporučuje se, aby v samotném HTML bylo co nejméně JavaScriptu a tak se přidávají události automaticky, tj. že se projdou například všechny odkazy a u těch, který vyhovují, se přidá třeba nějaká ta událost. Není lepší přidávat události přímo do kódu, přece než se projdou všechny některé elementy, může to nějakou dobu trvat, ne? Nebo se bojím zbytečně? :-) |
||
Jan Tvrdík Profil |
#2 · Zasláno: 12. 7. 2008, 19:40:12
Bojíš se zbytečně, protože to přiřazení událostí zabere jen zlomek sekundy.
|
||
joe Profil |
#3 · Zasláno: 12. 7. 2008, 19:47:28
Jan Tvrdík
Ok, ale co když po načtení (onload) procházel nejenom odkazy, ale i víc elementů. Případně existuje něco i pro JavaScript, co spočítá jak trval skript dlouho? |
||
ah01 Profil |
#4 · Zasláno: 12. 7. 2008, 19:54:55
1) o čas se bojíš zbytečně, musel bys dělat opravdu velké kejkle, aby to bylo poznat
2) mnohem znatelnější ale je jestli svůj skript spouštíš na onload nebo ondomready 3) měřit můžeš buď pomocí Firebug (doplněk do FF) nebo třeba přímo var end, start = new Date(); ... nějaký časově náročný kód ... end = new Date(); alert((end - start) + " ms") |
||
joe Profil |
#5 · Zasláno: 12. 7. 2008, 21:55:41
ah01
1) ok 2) Kde jinde bych měl skript spouštět, když má například k nějakým odkazům přidat nějakou událost? Třeba na konec stránky přidat: <script> funkce(); </script> ? 3) jak jednoduché :) K tomu FireBugu, znám ho dobře na CSS, ale na JS ne, nikde jsem neobjevil nějaký čas, jak dlouho probíhá skript. Teď jsem našel čas na záložce Net, ale tím asi délku trvání nějaké funkce nezjistím nebo ano? ah01 & Jan Tvrdík Díky. |
||
Chamurappi Profil |
#6 · Zasláno: 12. 7. 2008, 22:08:09
Reaguji na joa:
Pracuješ-li s „živou“ kolekcí získanou pomocí metod DOMu (třeba getElementsByTagName či childNodes), může být z hlediska výkonu efektivnější vyrobit si na kejkle její „mrtvou“ napodobeninu v poli. Živá kolekce je totiž připravená kdykoliv změnit své složení a prohlížeč může ověřovat její složení častěji, než je vhodné. |
||
joe Profil |
#7 · Zasláno: 13. 7. 2008, 18:41:23
Chamurappi
Ok, budu na to myslet. Ještě mám takovou otázku. Když přidávám událost pomocí addEventListener / attachEvent (v IE) a přidám ji na nějaký odkaz a teď bych chtěl, aby když kliknu, tak se provedla funkce, ale na adresu v href se už nepřesměrovalo. Tedy něco jako function test() { alert('Nejde to!'); } <a href="http://example.com" onclick="test(); return false;">Example.com</a> Jen s tím rozdílem, že tam "přidávám" <a href="http://example.com" onclick="test(this);">Example.com</a> Tak jak mám funkci test upravit? Zkoušel jsem nastavit returnValue z event na false, ale tak mi to nefunguje a stejně to skočí na example.com. |
||
joe Profil |
#8 · Zasláno: 13. 7. 2008, 19:42:25
Už jsem našel co jsem hledal - preventDefault a returnValue.
|
||
los Profil * |
#9 · Zasláno: 13. 7. 2008, 20:02:45
Oveľa efektívnejšie než priradenie udalosti každému elementu je spracovávať udalosti rodičovského elementu. Konkrétny element, ktorý danú udalosť vyvolal, je vo vlastnosti udalosti target/srcElement.
|
||
joe Profil |
#10 · Zasláno: 14. 7. 2008, 12:40:45
los
Ale jak mám "rozdělit" ty, kterým chci dát událost rodičovského elementu a kterým ne. Můj problém byl, že jsem přidal událost odkazu (tedy rodičovskému prvku obrázku, který byl v odkazu), ale po kliknutí na odkaz v obrázku, mi JavaScript hlásil, že klikám na obrázek a já jsem chtěl, aby mi hlásil, že klikám na odkaz. Možná jsi to napsal dobře a jen to nechápu, to je možné :-) |
||
los Profil * |
#11 · Zasláno: 14. 7. 2008, 13:20:26
Napr. chceš obsluhovať kliknutie všetkých odkazov, ktoré majú atribút class rovný "test". V tom prípade bude obsluha udalosti v nadradenom elemente vyzerať napr. takto (netestované, môžu tam byť chyby):
element.onclick = function(e) { e = e || window.event; for (var anchor = e.target || e.srcElement; anchor; anchor = anchor.parentNode) if (anchor.tagName == "A" && anchor.className == "test") { alert(anchor.innerHTML); return false; } } |
||
Časová prodleva: 16 let
|
0