Un javascript discret

Vechea școală

Odată, când eram tineri și nevinovați, am adăugat atributul de încărcare elementului corpului.

Ceea ce trebuie să ne amintim este că am făcut rău și nu o vom face din nou!







Dacă numim scriptul (ele) din elementul corpului. vom reveni la cel vechi, pentru că vom continua să amestecăm marcajele și apelurile de evenimente. Mutați apelul script într-un fișier .js - asta este ceea ce trebuie să facem.

Metodă cu separare

Apelăm scriptul atașând apelul la evenimentul de încărcare al obiectului ferestrei.

Când avem o singură funcție, nu introducem parantezele la sfârșitul funcției, ar trebui să returneze rezultatele funcției mai bine decât începerea funcției.

Dacă avem mai multe funcții, trebuie să apelăm restul la o funcție anonimă, de data aceasta cu paranteze.

Neajunsul acestei soluții este că nu suntem complet discontinuu. Dacă avem mai mult de un .js conectat, script-urile numite pot suprascrie apelurile onload una de cealaltă.

Un mod cu adevărat discret







Este posibil să adăugați agenți de procesare a evenimentelor la operatorii existenți. Este destul de trist faptul că diferite browsere sunt echipate cu această funcție în moduri diferite, iar IE pe Mac nu este echipat deloc.

Această funcție este pusă în aplicare, de exemplu, într-o funcție reutilizabilă frumoasă scrisă de Scott Andrew. Când apelați o funcție, îi transmiteți obiectul pe care doriți să-l legați de eveniment, tipul evenimentului și numele funcției.

Dezavantajul evident este că funcția nu leagă nimic la IE pe un Macintosh.

Vocea operei

Am primit o scrisoare de la serviciul de asistență tehnică din Opera, explicând că în exemplul precedent există omisiuni, deci acum diferă de exemplul de pe site-ul lui Scott.

Funcția addEvent nu se conformează pe deplin standardelor. Se pare că lucrează în FireFox, dar deoarece au rezolvat această eroare. probabil că nu va mai funcționa în FireFox. Funcția probabil că nu va face ceea ce doriți în Opera, care susține corect standardele.

Problema este că configurați un handler de evenimente "interceptare", folosind adevăratul ca argument al treilea în funcția addEventListener:

Acest lucru ar trebui să fie fals. Dacă variabila este adevărată. Un eveniment de teleportare nu ar trebui să fie declanșat pentru niciun element pentru care este înregistrat. De exemplu, dacă utilizați acest lucru cu un element LI. nu va face nimic în timp ce LI are copii. Verificați în Opera :)

Și mai mult

Citiți mai multe







Articole similare

Trimiteți-le prietenilor: