Tabele de compatibilitate de evenimente

Ultima actualizare pe 22 Februarie 2009.

Vezi sectiunea 7B a cartii.

Documentatie Microsoft.

Documentatie Mozilla. Asigurati-va ca studiati si "Alte evenimente".

Intotdeauna Safari a consultat tabelele mele de compatibilitate pentru mai multe informatii despre JavaScript, deci in acest moment cititi documentatia Safari.

Documentatie Opera; din pacate evenimentele sunt insumate pe baza de tag.

Specificatia W3C DOM Events. Din pacate nu se acorda atentie mereu implementarii curente a evenimentelor din browsere.

Pe aceasta pagina am oferit o privire de ansamblu asupra compatibilitatii evenimentelor de browser.

Presupun ca stiti cele trei modele de inregistrare de evenimente(traditional, W3C si Microsoft) cat si barbotarea evenimentelor si capturarea.

Mi-am petrecut majoritatea timpului pe evenimentele cross-browser; linkurile din primul tabel de compatibilitate duc catre mai multe tabele de compatibilitate cu informatii detaliate despre aceste evenimente.

Am testat doar suportul de baza al browserelor pentru evenimentele Microsoft si W3C fara a intra prea adanc in detalii.

Evenimente cross-browser

Definitie: evenimentele cross-browser sunt suportate de IE si cel putin inca doua din urmatoarele trei browsere: Firefox, Safari, Opera.

Toate bug-urile notate in tabelul de mai jos sunt explicate in paginile detaliate. Nu am testat inca evenimentele load si unload inca; vor fi adaugate in tabel mai tarziu.

Vezi articolul de blog iPhone Events pentru mai multe informatii despre evenimente pe iPhone.

Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7

cand un element isi pierde focusul.

da prea multe da Incomplet aproape Incomplet aproape prea multe Incomplet
  • Firefox 2 si Opera activeaza prea multe evenimente intr-o varietate de circumstante si de asemenea le barboteaza incoect.
  • Safari si Chrome nu suporta aceste evenimente pe linkuri si/sau campuri de form in toate circumstantele.
  • Safari iPhone nu activeaza evenimentul cand fereastra isi pierde focusul.
  • Konqueror nu suporta aceste evenimente in fereastra browserului.

cand valoarea unui camp de form se schimba.

cu bug-uri da da da Incomplet Incomplet
  • IE are un bug serios in manipularea acestui eveniment pe checkbox-uri si butoane radio.
  • IE, Opera, si Konqueror au un bug serios in manipularea acestui eveniment cand utilizatorul foloseste tastatura pentru a chimba un select.

cand un eveniment mousedown si mouseup are loc pe acelasi element SAU un element este activat de tastatura.

da da da da da da
  • iPhone activeaza mousedown, mouseup si click in ordinea corecta la un click, dar le activeaza ori pe toate trei ori pe nici unul. Vezi mousedown.
Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7

cand un utilizator da click-dreapta pentru meniul de context.

da cu bug-uri da cu bug-uri da netestabile da nu nu

Prevenirea implicitului (i.e. prevenirea aparitiei meniului de context) este tot scopul acestui eveniment.

  • IE8rc1 previne intotdeauna implicitul cand acest eveniment este manipulat in document.
  • Pentru prevenirea implicitului in Firefox 3 trebuie sa dezactivati barbotarea evenimentului.

cand textul este copiat.

da nu cu bug-uri da netestabile da nu nu
  • Firefox 3 are o implementare greoaie.

cand textul este taiat.

da nu cu bug-uri da netestabile da nu nu
  • Firefox 3 are o implementare greoaie.

cand doua evenimente click au loc pe acelasi element intr-un interval de timp rezonabil.

da da da nu da da nu

cand browserul intalneste o eroare JavaScript pe un fisier de imagine inexistent.

aproape aproape Incomplet Incomplet Incomplet Incomplet
  • IE si Firefox au probleme cu erorile JavaScript in modelul de inregistrare traditional al evenimentului.
  • Safari, Chrome, Opera si Konqueror nu suporta acest eveniment pe erorile JavaScript.
Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7

cand un element primeste focus.

da prea multe Incomplet aproape Incomplet aproape prea multe Incomplet
  • Firefox 2 si Opera activeaza prea multe evenimente intr-o varietate de circumstante si de asemenea le barboteaza incoect.
  • Firefox activeaza un eveniment focus oricand dati click pe document.
  • Safari si Chrome nu suporta aceste evenimente pe linkuri si/sau campuri de form in toate circumstantele.
  • Safari iPhone nu activeaza evenimentul cand fereastra primeste focus.
  • Konqueror nu suporta aceste evenimente in fereastra browserului.

cand un utilizator tine o tasta apasata.

da da da da minim Incomplet

Evenimentul ar trebui sa fie activat continuu atata timp cat utilizatorul tine tasta apasata.

  • Evenimentul keydown nu se repeta in Opera si Konqueror.
  • Nu puteti prevenii implicitul onkeydown in Opera.
  • Pe iPhone nu este posibil sa repetati un caracter prin mentinerea unei taste apasate.

cand apasarea unei taste duce catre un caracter care este adaugat unui element HTML.

da prea multe prea multe da nu da prea multe prea multe

Acest eveniment ar trebui sa se activeze numai daca o apasare de tasta duce la un caracter care este adaugat unui element HTML cum ar fi text input. Nu ar trebui sa se declanseze cand utilizatorul apasa taste cum ar fi tastele sageti din care nu rezulta nici un caracter.

Evenimentul ar trebui sa fie activat continuu atata timp cat utilizatorul tine acea tasta apasata.

  • Firefox, Safari 3.0, Opera si Konqueror activeaza evenimente keypress la orice tasta.

cand un utilizator elibereaza o tasta.

da da da da da da

Acest eveniment se activeaza dupa ce tasta apasata a fost procesata; de exemplu dupa ce un caracter a fost adaugat unui text input. Nu este posibil sa anulam actiunea implicita pentru ca acea actiune a avut deja loc. Acest eveniment nu ar trebui sa se repete.

Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7

cand un utilizator tine apasat un buton de mouse.

da da da da da da
  • iPhone activeaza mousedown, mouseup si click in ordinea corecta la un click, dar activeaza ori toate evenimentele ori nici unul. Tinerea apasata a unui buton pe un element si asteptarea de a-si pierde focusul dupa o vreme nu activeaza nici un eveniment, chiar daca ar trebui sa se intample ceva prin activarea evenimentului mousedown imediat ce degetul utilizatorului atinge ecranul.

cand mouse-ul este mutat.

da da da Alternative da da da
  • Pe iPhone un eveniment mousemove este echivalent cu un eveniment mouseover. Se activeaza pe un element cand focusul utilizatorului se muta pe alt element.

cand mouse-ul paraseste un element.

da da da Alternative da da da
  • Pe iPhone aceste evenimente se activeaza cand focusul utilizatorului se muta de la un element la altul. cand un element primeste focusul declanseaza mouseover, cand pierde focusul declanseaza mouseout.

cand mouse-ul este deasupra unui element.

da da da Alternative da da da
  • Pe iPhone aceste evenimente se activeaza cand focusul utilizatorului se muta de la un element la altul. cand un element primeste focusul declanseaza mouseover, cand pierde focusul declanseaza mouseout.

cand un utilizator elibereaza butonul unui mouse.

da da da da da da
  • iPhone activeaza mousedown, mouseup si click in ordinea corecta la un click, dar declanseaza ori toate evenimentele ori nici unul. Vezi mousedown.
Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7

cand un utilizator foloseste rotita unui mouse. nutati ca pagina nu trebuie derulata pentru declansarea evenimentului.

nu da cu bug-uri nu da Alternative da da nu

Este posibil sa anulam actiunea implicita pentru ca elementul sa nu se deruleze.

  • Daca un manipulator de evenimente mousewheel este definit pe un element in IE8rc1, folosirea rotitei mouse-ului nu deruleaza elementul. Evenimentul se declanseaza totusi corect.
  • Pe iPhone, evenimentul mousewheel se declanseaza cand utilizatorul deruleaza un element derulabil (cu overflow: auto), si nu atunci cand deruleaza documentul. (Derularea unui element derulabil este facuta cu doua degete; nu unul.)

cand textul este lipit.

da nu cu bug-uri da netestabile da nu nu
  • Firefox 3 are o implementare greoaie.

cand utilizatorul reseteaza un form.

da da da da da da

cand fereastra este redimensionata.

da da da cu bug-uri da da da
  • Safari iPhone este imprevizibil. (Am sperat ca va activa evenimentul cand utilizatorul face zoom in sau out, dar nu am avut noroc. Pe de alta parte, evenimentul scroll se activeaza in acea situatie.)
Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7

cand ceva este derulat.

da da cu bug-uri da cu bug-uri da nu
  • Safari monitorizeaza probabil accesul scrollTop pentru a determina daca utilizatorul a derulat un element cu overflow: auto. (Nu se aplica la iPhone.)
  • Safari iPhone declanseaza de asemenea acest eveniment cand utilizatorul face soom in sau out.

cand un utilizator selecteaza text dintr-un camp text input.

da da da netestabile da da nu

In ceea ce ma priveste acest eveniment ar trebui sa se activeze si cand utilizatorul selecteaza text din orice element. Nici un browser nu este de acord se pare.

cand un utilizator submite un form.

da da da da da da
Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7

Evenimente W3C

Evenimentele de mai jos nu functioneaza cu inregistrarea evenimentelor traditionale. Trebuie sa folositi addEventListener pentru a captura aceste evenimente.

Nu inteleg de ce este asa; incalca vechea regula de baza care afirma ca orice eveniment este disponibil in orice model de inregistrare.

Numele evenimentelor asemenatoare camelcase sunt necesare. Si aici, o regula veche este incalcata: toate celelalte nume de evenimente sunt strict cu litere mici.

Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7
DOMActivate

Ar trebui sa se declanseze cand un element este activat.

Pagina de test.

nu da incorect si incomplet nu incorect

Un link este activat cand utilizatorul il urmeaza. Un checkbox sau radio este activat cand este bifat sau debifat.

  • Safari, Chrome si Konqueror trateaza incoect acest eveniment ca echivalent al evenimentului click. De exemplu, cand dati click pe un text input sau chiar pe document in general evenimentul se activeaza. Nu ar trebui: click pe un text input nu activeaza casuta text. Firefox activeaza corect doar un eveniment click.
  • Safari si Chrome nu activeaza acest eveniment pe radio si checkbox.
DOMAttrModified

Un atribut din ramificatia DOM al elementului care a fost schimbat.

Pagina de test.

nu da nu nu da nu
  • Firefox si Opera 9 activeaza de asemenea acest eveniment cand derulati o pagina, chiar daca nu este modificat nici un atribut DOM .
DOMCharacterDataModified

Textul din ramificatia DOM a elementului care a fost schimbat.

Pagina de test.

nu Incomplet Incomplet da da Incomplet Incomplet
  • Firefox, Safari 3.0, Opera si Konqueror nu activeaza evenimentul cand schimbam datele caracter prin innerHTML.
Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7
DOMFocusIn

Ca focus, dar barboteaza.

Pagina de test.

nu nu nu Incomplet aproape da da
  • Safari nu activeaza evenimentul cand folosim mouse-ul pentru a pune focusul pe linkuri sau elemente cu tabindex.
  • Chrome nu activeaza evenimentul cand folosim mouse-ul pentru a pune focusul pe linkuri.
DOMFocusOut

Ca blur, dar barboteaza.

Pagina de test.

nu nu nu Incomplet aproape da da
  • Safari nu activeaza evenimentul cand punem focus pe linkuri sau elemente cu tabindex.
  • Chrome nu activeaza evenimentul cand punem focus pe linkuri.
DOMMouseScroll

cand utilizatorul foloseste rotita mouse-ului.

Pagina de test.

nu da nu netestabile nu nu nu

Echivalentul mousewheel.

DOMnodeInserted

Un nou nod a fost introdus in ramificatia DOM a elementului.

Pagina de test.

nu da da da da Incomplet

Daca schimbam innerHTML-ul unui element, browserele activeaza un eveniment DOMnodeRemoved pentru fiecare nod copil al elementului, si apoi evenimentul DOMnodeInserted pentru fiecare nod copil in noua versiune.

  • Konqueror nu activeaza aceste evenimente cand folosim innerHTML.
Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7
DOMnodeRemoved

Un nod a fost eliminat din ramificatia DOM a elementului.

Pagina de test.

nu da prea multe prea multe da Incomplet

Daca schimbam innerHTML-ul unui element, browserele activeaza prima data un eveniment DOMnodeRemoved pentru fiecare nod copil al elementului, si evenimentul DOMnodeInserted pentru fiecare nod copil in noua versiune.

  • Safari activeaza doua evenimente cand eliminam un nod.
  • Firefox si Opera activeaza acest eveniment cand schimbam continutul nodului prin innerHTML. Safari nu activeaza. Aceasta este probabil cauzata de implementarile innerHTML, si nu este considerat un bug.
  • Konqueror nu activeaza aceste evenimente cand folosim innerHTML.
DOMSubtreeModified

Cel mai generic eveniment: ceva din ramificatia DOM a elementului s-a schimbat.

Pagina de test.

nu nu da da da nu da
textInput

Echivalentul apasarii unei taste.

Pagina de test.

nu nu da da nu nu

Acesta este un eveniment DOM, in ciuda faptului ca lipseste "DOM" in nume. De aceea nu functioneaza cu inregistrarea evenimentelor traditionale.

Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7

Evenimente Microsoft

Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7
activate

In ciuda numelui acest eveniment este un echivalent al focusin.

Pagina de test.

da nu nu nu nu nu
beforecopy

Pagina de test.

da nu nu da netestabile da nu nu

Nu inteleg scopul real al acestor evenimente. Totusi, cand un utilizator cheama un meniu de de context care contine actiuni cut, copy si paste , beforecut, beforecopy si beforepaste se activeaza toate.

beforecut

Pagina de test.

da nu nu da netestabile da nu nu

Vezi beforecopy.

beforepaste

Pagina de test.

da nu nu Incomplet netestabile Incomplet nu nu

Vezi beforecopy.

  • Safari 3.1 si Chrome nu actioneaza acest eveniment inaintea unei actiuni paste. Functioneaza perfect in meniuri de context.
Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7
deactivate

In ciuda numelui acest eveniment este un echivalent al focusout.

Pagina de test.

da nu nu nu nu nu
focusin

Ca focus, dar barboteaza.

Pagina de test.

nu da nu nu nu nu nu

Nu este disponibil in fereastra.

focusout

Ca blur, dar barboteaza.

Pagina de test.

nu da nu nu nu nu nu

Nu este disponibil in fereastra.

hashchange

cand valoarea hash a locatiei se schimba.

Pagina de test.

nu da nu nu nu nu nu

Acest eveniment poate fi interesant pentru monitorizarea Inapoi/Inainte in interfetele Ajax.

Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7
mouseenter

cand mouse-ul intra pe un element, dar nu barboteaza.

MULT mai folositor decat mouseover. Hai, Mozilla. Hai, Apple. Hai, Google. Hai, Opera. Hai, KDE.

Pagina de test.

da nu nu nu nu nu

CELELALTE BROWSERE AR TREBUI SA IMPLEMENTEZE ACESTE EVENIMENTE CAT MAI CURsi POSIBIL.

(Da, stiu ca strig, dar o zic din 2003 si nimeni nu a fost atent la ce am zis.)

Mouseover si mouseout se activeaza de asemenea cand utilizatorul pune mouse-ul pe un element copil si apoi il ia de pe elementul pe care s-au inregistrat evenimentele. Mouseenter si mouseleave nu o fac. Deci, ele sunt echivalentele adevarate ale CSS :hover.

Odata ce aceste evenimente sunt suportate de toate browserele, crearea meniurilor dropdown vor devenii ca o plimbare in parc. Este vina Firefox, Safari si Opera ca inca trebuie sa pierdem ore intregi pentru a descoperii evenimente mouseover si mouseout importante si neimportante. Daca am fi avut doar mouseenter si mouseleave, toate problemele noastre ar fi rezolvate.

mouseleave

cand mouse-ul paraseste un element, dar nu barboteaza.

MULT mai folositor decat mouseout.

Pagina de test.

da nu nu nu nu nu

Vezi remarci mouseenter.

Event IE 5.5 IE 6 IE 7 IE8rc1 as IE7 IE8rc1 as IE8 FF 2.0 FF 3.0 FF 3.1b2 Saf 3.0 Win Saf 3.1 Win iPhone 3G Chrome 1.0 Opera 9.62 Opera 10a Konqueror 3.5.7

Aceste tabele de compatibilitate sunt sponsorizate de

Google
Chicago hardwood flooring