În programarea tradițională, aplicațiile sunt executate secvențial de la început până la finalizare pentru a-și produce rezultatele. Cu toate acestea, în prezent, modelul predominant este cel al programării bazate pe evenimente. Scripturile și programele se așteaptă fără a face nici o sarcină până când apare un eveniment. Odată produsă, acestea au o anumită sarcină asociată cu apariția acelui eveniment și când se încheie, scriptul sau programul revine la starea de așteptare.
JavaScript permite script-urilor cu metode de programare: bazate pe secvențiale și eveniment. Evenimentele JavaScript permit interacțiunea dintre aplicațiile JavaScript și utilizatorii. De fiecare dată când apare un buton, apare un eveniment. De fiecare dată când este apăsată o cheie, este produs și un eveniment. Cu toate acestea, pentru ca un eveniment să apară, nu este obligatoriu ca utilizatorul să intervină, deoarece de exemplu, de fiecare dată când o pagină este încărcată, este produsă și un eveniment.
Nivelul de duminică 1 nu include specificațiile legate de Evenimente JavaScript. Nivelul de duminică 2 include anumite aspecte legate de evenimente și DOM Nivelul 3 include specificația completă a evenimentelor JavaScript. Din păcate, specificația DOM Nivelul 3 a fost publicată în 2004, mai mult de zece ani după ce primele browsere au inclus evenimente.
Din acest motiv, multe dintre proprietățile și metodele curente legate de evenimente sunt incompatibile cu cele ale soarelui . De fapt, browsere precum Internet Explorer tratează evenimente după propriul model incompatibil cu standardul.
Modelul simplu de eveniment a fost introdus în versiunea 4 a standardului HTML și este considerată parte a celui mai de bază nivel DOM. Deși caracteristicile sale sunt limitate, este singurul model compatibil cu toate browserele și, prin urmare, singurul care vă permite să creați aplicații care funcționează în același mod în toate browserele.
15.1 Tipuri de evenimente
Fiecare element XHTML are propria listă de posibile evenimente care pot fi atribuite. Același tip de eveniment (de exemplu, făcând clic pe butonul stâng al mouse-ului) poate fi definit pentru mai multe elemente XHTML și același element XHTML poate avea asociații de evenimente diferite.
Numele evenimentelor este construit prin prefixul on
, urmat de numele englezesc al acțiunii asociate evenimentului. Astfel, evenimentul pentru a face clic pe un element cu mouse-ul se numește onclick
și evenimentul asociat cu mutarea mouse-ului se numește onmousemove
.
Tabelul următor rezumă cele mai importante evenimente definite de JavaScript:
Eveniment | Descriere | Elemente pentru care este definit | |
---|---|---|---|
iv id = „bfeacb4c29” | Un element pierde | <button> , <input> , 30d35e9f44 „> , <textarea> , |
Un element a fost modificat | <input> 30d35e9f44 „> , div id =” EA92971B26 ” |
iv id =” ff5c9bb483 ” | Apăsați și plasați mouse-ul | Toate elementele | |
ondblclick |
Apăsați de două ori la rând cu mouse-ul | Toate elementele | |
onfocus |
<button> , <input> , <label> , <select> , <textarea> , iv id = ” Div id = |
Apăsați o tastă și nu o eliberați | elemente de formular și |
Apăsați A | Form Elements și onkeyup |
eliberați o tastă pulsată | Form elemente și |
iv id = „7101f309b9” | Pagina complet încărcată | ||
onmousedown |
Toate elementele | ||
onmousemove |
mutați Mouse | Toate elementele | |
onmouseout |
mouse-ul „frunze” de la | Toate elementele | |
onmouseover |
mouse-ul „intră” în | elemente | |
div id = „815CFC441C” | Eliberați butonul mouse-ului | Toate elementele | |
onreset |
Inițializați formularul | Modificați dimensiunea ferestrei | onselect |
Selectați un text | <input> , <textarea> |
onsubmit |
trimite |
|
|
onunload |
Pagina este abandonată, de exemplu atunci când închideți browserul DOR | iv id = „b5aee8da8” |
Evenimentele cele mai utilizate în aplicațiile web tradiționale sunt onload
pentru a aștepta pagina completă pagina, evenimente onclick
, iv id = „1137307b14” , onmouseout
Pentru a controla mouse-ul și onsubmit
pentru controlul expedierii Formulare.
Unele evenimente din tabelul anterior (onclick
, onkeydown
, onkeypress
, onreset
div id = „0688b9518c” ) vă permit să evitați „acțiunea implicită” a acelui eveniment. Mai târziu, acest comportament este prezentat în detaliu, care poate fi foarte util în unele tehnici de programare.
acțiuni tipice pe care un utilizator efectuează pe o pagină web poate duce la o succesiune de evenimente. Prin apăsarea de exemplu pe un buton de tip <input type="submit">
evenimente sunt declanșate iv id = „62d35b268b” , iv id = „ff5c9bb483” , onmouseup
și onsubmit
15.1.1 Managerii de evenimente
Un eveniment JavaScript de la sine nu are utilitate. Pentru ca evenimentele să fie utile, funcțiile sau codul JavaScript trebuie asociate cu fiecare eveniment. În acest mod, când apare un eveniment, codul indicat este executat, astfel încât aplicația poate răspunde la orice eveniment care apare în timpul executării.
Funcțiile sau codul JavaScript care sunt definite pentru fiecare eveniment pe care îl numesc eveniment Manager (manipulatorii de evenimente în limba engleză) și, pe măsură ce JavaScript este o limbă foarte flexibilă, există mai multe moduri diferite de indicare a manipulatorilor:
- i) ca atribute ale elementelor xHTML.
- Manipulatori ca functiuni externe JavaScript.
- „semantic” stivuitoare.
15.1.1.1 Manipulatori, cum ar fi atributele XHTML
Aceasta este metoda cea mai simplă și mai puțin profesională de a indica codul JavaScript care trebuie executat atunci când apare un eveniment. În acest caz, codul este inclus într-un atribut al elementului XHTML în sine. În exemplul următor, doriți să afișați un mesaj atunci când utilizatorul perforați cu mouse-ul pe un buton:
<input type="button" value="Pinchame y verás" onclick="console.log('Gracias por pinchar');" />
în acest sens Metodă, atributele XHTML sunt definite cu același nume ca și evenimentele pe care doriți să le gestioneze. Exemplul anterior dorește doar să controleze evenimentul de înșurubare cu mouse-ul, al cărui nume este onclick
. Astfel, elementul XHTML pentru care doriți să definiți acest eveniment trebuie să includeți un atribut numit onclick
.
Conținutul atributului este un șir de text pe care îl conține Toate instrucțiunile JavaScript care sunt executate atunci când apare evenimentul. În acest caz, codul JavaScript este foarte simplu (console.log('Gracias por pinchar');
), deoarece este vorba numai de afișarea unui mesaj.
În acest exemplu, atunci când utilizatorul faceți clic pe Pe elementul <div>
arată un mesaj și când utilizatorul trece mouse-ul peste element, este afișat un alt mesaj:
<div onclick="console.log('Has pinchado con el ratón');" onmouseover="console.log('Acabas de pasar el ratón por encima');"> Puedes pinchar sobre este elemento o simplemente pasar el ratón por encima</div>
Acest alt exemplu include unul dintre cele mai utilizate instrucțiuni din cele mai vechi aplicații JavaScript:
<body onload="console.log('La página se ha cargado completamente');"> ...</body>
Mesajul anterior este afișat după ce pagina este încărcată complet, adică după descărcarea codului HTML, imaginile și orice alt obiect incluse pe pagină.
Evenimentul onload
este unul dintre cele mai utilizate de atunci, așa cum se vede în capitolul DOM, funcțiile care permit accesul și manipularea nodurilor DOM copacilor sunt disponibile numai atunci când pagina a fost încărcată complexă Tatic.
15.1.1.2 Managerii de evenimente și variabila Acest
JavaScript definește o variabilă specială numită this
care este creat automat și asta este angajează în unele tehnici avansate de programare. La evenimente, puteți utiliza variabila this
pentru a vă referi la elementul XHTML care a cauzat evenimentul. Această variabilă este foarte utilă pentru exemple precum următoarele:
Când utilizatorul trece mouse-ul peste <div>
, culoarea de margine este arătată negru. Când mouse-ul lasă <div>
, marginea este afișată din nou cu culoarea gri deschis originale.
<div style="width:150px; height:60px; border:thin solid silver"> Sección de contenidos...</div>
Dacă variabila nu este utilizată this
, codul necesar pentru a modifica culoarea marginilor, ar fi după cum urmează:
<div style="width:150px; height:60px; border:thin solid silver" onmouseover="document.getElementById('contenidos').style.borderColor='black';" onmouseout="document.getElementById('contenidos').style.borderColor='silver';"> Sección de contenidos...</div>
Codul anterior este prea lung și prea predispus la greșeli. În codul unui eveniment, JavaScript creează automat variabila this
, care se referă la elementul XHTML care a provocat evenimentul. Astfel, exemplul anterior poate fi rescris după cum urmează:
div> iv id = „72879d52e8”
Codul anterior este mult mai compact, mai ușor de citit și de a scrie și să continuați să lucrați corect chiar dacă valoarea atributului ID al <div>
.
15.1.1.3 manageri de evenimente ca funcții externe
Definiția agenților de funcționare a evenimentelor din atributele XHTML este o metodă simplă, dar necompresată pentru a face față evenimentelor JavaScript. Principalul dezavantaj este că este complicat în exces cât de curând se adaugă câteva instrucțiuni, deci este recomandat numai pentru cele mai simple cazuri.
Când codul funcției de manipulare este mai complex, cum ar fi Validarea unui formular, este recomandabil să grupați tot codul JavaScript într-o funcție externă care este invocată din codul XHTML când apare evenimentul.
în acest fel, următorul exemplu:
<input type="button" value="Pinchame y verás" onclick="console.log('Gracias por pinchar');" />
poate fi transformat în:
function muestraMensaje() { console.log('Gracias por pinchar');}
în funcții externe Nu este posibilă utilizarea variabilei this
în același mod ca în Stivuitoarele introduse în atributele XHTML. Prin urmare, este necesar să treceți variabila this
ca parametru la funcția de manipulare:
function resalta(elemento) { switch(elemento.style.borderColor) { case 'silver': case 'silver silver silver silver': case '#c0c0c0': elemento.style.borderColor = 'black'; break; case 'black': case 'black black black black': case '#000000': elemento.style.borderColor = 'silver'; break; }}
<div style="padding: .2em; width: 150px; height: 60px; border: thin solid silver" onmouseover="resalta(this)" onmouseout="resalta(this)"> Sección de contenidos...</div>
În exemplul anterior, funcția externă este trecută parametrul this
, care În cadrul funcției se numește elemento
. Prin trecerea this
ca parametru, este posibilă accesarea directă a funcției externe la proprietățile elementului care a cauzat evenimentul.
Pe de altă parte, exemplul anterior este complicat de modul în care diferitele browsere stochează valoarea proprietății borderColor
. În timp ce magazinele Firefox (în cazul culorii celor patru margini) Valoarea simplă black
, Internet Explorer stochează ca black black black black
și Opera stochează hexazecimal Reprezentare #000000
.
15.1.1.4 Stivuitoare de evenimente semantice
Utilizați atributele XHTML sau funcțiile externe pentru a adăuga managerii de evenimente are un inconvenient grav : „Încorporați” codul XHTML al paginii.
După cum se cunoaște, când se creează pagini web se recomandă separarea conținutului (XHTML) din prezentare (CSS). Pe cât posibil, este recomandat, de asemenea, separarea conținutului (XHTML) de la programare (JavaScript). Se amestecă JavaScript și XHTML complică excesiv codul sursă al paginii, acesta face dificilă întreținerea și reduce semantica documentului final produs.
Din fericire, există o metodă alternativă de a defini agenții de evenimente JavaScript. Această tehnică este de a atribui funcții externe utilizând proprietățile DOM ale elementelor XHTML. Astfel, următorul exemplu:
<input type="button" value="Pinchame y verás" />
Codul XHTML rezultat este foarte „curat”, deoarece nu se amestecă cu codul JavaScript. Tehnica managerilor semantici constă din:
- atribuie un identificator unic la elementul XHTML folosind atributul id.
- Creați o funcție JavaScript responsabilă de manipularea evenimentului.
- Atribuirea funcției la un anumit eveniment al elementului XHTML folosind DOM.
Un alt avantaj suplimentar al acestei tehnici este că funcțiile externe pot utiliza variabila this
sa referit la elementul pe care evenimentul original.
Atribuirea funcției de manipulare utilizând DOM este un proces care necesită o explicație detaliată. În primul rând, obțineți referința elementului la care va fi alocat manipulatorul:
document.getElementById("pinchable");
Apoi, i se atribuie Funcția externă la evenimentul dorit prin intermediul unui element de proprietate cu același nume de eveniment:
div> iv id = „656F3F4657”
În cele din urmă, extern funcţie. După cum sa menționat deja în capitolele anterioare, cel mai important (și cea mai frecventă cauză a erorilor) este aceea de a indica numele funcției, care este, distribuie cu parantezele prin atribuirea funcției:
Dacă parantezele sunt adăugate la sfârșit, funcția este de fapt invocată și atribuirea valorii returnate de funcția la evenimentul onclick
Element.
Singurul dezavantaj al acestei metode este că manipulatorul sunt atribuite utilizând funcțiile DOM, care pot fi utilizate numai după ce pagina a fost încărcată complet. În acest mod, astfel încât atribuirea manipulatoarelor nu este eronată, este necesar să se asigure că pagina a fost deja încărcată.
Una dintre cele mai simple modalități de a vă asigura că un anumit cod se va desfășura Fiți executați după aceea că pagina este complet încărcată este de a utiliza evenimentul onload
window.onload = function() { document.getElementById("pinchable").onclick = muestraMensaje;}
Stadiul tehnicii utilizează o funcție anonimă pentru a atribui anumite instrucțiuni evenimentului onload
al paginii (în acest caz, acesta a fost setat de obiectul ). În acest mod, pentru a vă asigura că un anumit cod va fi executat după ce pagina a fost încărcată, este necesar doar să o includeți în interiorul următoarei construcții:
window.onload = function() { ...}
15.2 Fluxul evenimentului
În plus față de evenimentele de bază care au fost văzute, browserele includ un mecanism conexat numit flux de evenimente sau „flux de evenimente”. Fluxul de evenimente permite mai multor elemente diferite pentru a răspunde la același eveniment.
Dacă un element <div>
cu un buton este definit în interiorul său când utilizatorul face clic pe Butonul, browserul vă permite să atribuiți o funcție de răspuns la buton, o altă funcție de răspuns la <div>
, care conține acest lucru și o altă funcție de răspuns la pagina completă. În acest mod, un singur eveniment (pulsarea unui buton) determină răspunsul de trei elemente de pe pagină (inclusiv pagina însăși).
Ordinea pe care evenimentele atribuite fiecărui element sunt executate de la Pagina este ceea ce constituie fluxul de evenimente. În plus, există multe diferențe în fluxul de evenimente din fiecare browser.
15.2.1 Eveniment Bubbling
În acest model de flux de evenimente, ordinea urmată este de la element mai specifice pentru elementul mai puțin specific.
În exemplele următoare se utilizează următoarea pagină HTML:
Când este apăsat pe text „Faceți clic aici”, care se află în interiorul <div>
, următoarele evenimente sunt executate la comanda care arată următoarea schemă:
Figura 15.1 „Eveniment Bubbling” Schema de operare
Primul eveniment care este luat în considerare este cel generat de <div>
care conține mesajul. Apoi, browserul rulează elementul ascendenților până când ajunge la nivelul superior, care este elementul .
Acest model de flux de evenimente este cel care include Internet Explorer browser. Browserele familiei Mozilla (de exemplu Firefox) suportă, de asemenea, acest model, dar ușor modificat. Exemplul anterior dintr-un browser de familie Mozilla prezintă următorul flux de evenimente:
Figura 15.2″ Eveniment Bubbling „Schema de operare în browserele Mozilla
Deși obiectul window
nu face parte din DOM, fluxul de evenimente implementate de Mozilla călătorește elementul Ascendenții Până la același obiect window
, adăugând un eveniment mai mult la modelul Internet Explorer.
15.2 Capturarea evenimentului
în partea cealaltă Modelul, fluxul de evenimente este definit din elementul mai puțin specific la cel mai specific element. Cu alte cuvinte, mecanismul definit este exact opusul „evenimentului Bubbling”. Acest model a fost utilizat de browserul Netscape Navigator Lipsing 4.0.
15.2.3 Evenimente dom
fluxul de evenimente definit în Soarele Specificația acceptă atât bubbling, cât și capturarea, dar „evenimentul capturarea „rulează mai întâi. Cele două fluxuri de evenimente călătoresc toate obiectele DO DOM de la obiectul document
la cel mai specific element și invers. În plus, majoritatea browserelor implementează standardele, fluxul continuă până la obiectul window
.
Fluxul evenimentului DOM din exemplul anterior este prezentat mai jos:
Figura 15.3 Schema de flux de evenimente a modelului DOM
cel mai specific Elementul de flux de evenimente nu este <div>
care declanșează execuția evenimentelor, dar nodul de tip TextNode
că acesta conține <div>
. Faptul de combinare a celor două fluxuri de evenimente determină cel mai specific nod pentru a executa două evenimente consecutiv.
15.3 Manipulatori și ascultători
În secțiunile anterioare Conceptul a fost introdus de la „Handler de evenimente „Sau handler de evenimente, care sunt funcțiile care răspund la evenimentele care apar. În plus, au fost vizualizate trei modalități de definire a calatorilor de evenimente pentru modelul evenimentului de bază:
- cod JavaScript într-un atribut al articolului HTML
- definiția evenimentului în HTML element în sine, dar manipulatorul este o funcție externă
- manipulatori semanici alocați prin Soare fără a fi nevoie să modificați codul HTML al paginii
oricare dintre aceste modele funcționează corect Toate browserele disponibile astăzi. Diferențele dintre browsere apar atunci când mai multe manipulare de evenimente sunt definite pentru același eveniment al unui element. Modul de a atribui și de a „dezastribui” mai multe mânere multiple depinde complet de browserul utilizat.
15.3.1 Stivuitoare de evenimente DOM
Specificația SDI definește două alte metode similare cu cele disponibile pentru Internet Explorer și așa-numitul addEventListener()
și removeEventListener()
Diferența principală dintre aceste metode Și cele de mai sus sunt că în acest caz sunt necesare trei parametri: numele „ascultătorului evenimentului”, o referință la funcția responsabilă pentru procesarea evenimentului și tipul de flux de evenimente la care se aplică.
P > Primul argument nu este numele complet al evenimentului așa cum se întâmplă în modelul Internet Explorer, dar trebuie să ștergeți prefixul on
. Cu alte cuvinte, dacă pe Internet Explorer, numele onclick
va fi acum folosit click
.
al treilea parametru este true
, manipulatorul este utilizat în faza de captare. Dacă al treilea parametru este false
, manipulatorul este asociat cu faza de bubbling.
Apoi, exemplele de mai sus sunt afișate utilizând metodele definite de dom:
function muestraMensaje() { console.log("Has pulsado el ratón");}var elDiv = document.getElementById("div_principal");elDiv.addEventListener("click", muestraMensaje, false); // Más adelante se decide desasociar la función al eventoelDiv.removeEventListener("click", muestraMensaje, false);
prin asocierea multiplă Funcții la un singur eveniment:
function muestraMensaje() { console.log("Has pulsado el ratón");} function muestraOtroMensaje() { console.log("Has pulsado el ratón y por eso se muestran estos mensajes");} var elDiv = document.getElementById("div_principal");elDiv.addEventListener("click", muestraMensaje, true);elDiv.addEventListener("click", muestraOtroMensaje, true);
Dacă o funcție este asociată cu un flux de evenimente dat, această funcție poate fi dezasocată numai în același tip de flux de evenimente. Dacă se consideră următorul exemplu:
div> iv id = „285449fdc9”
Ultima instrucțiune încearcă să disocieze funcția IV ID = „579D908344” În fluxul de evenimente de captare, în timp ce atunci când a fost asociat, a fost indicat fluxul de evenimente de bubbling. Deși executarea cererii nu se oprește și nu apare nicio eroare, ultima instrucțiune nu are niciun efect.
15.4 Evenimentul
Când apare un eveniment, nu este suficient atribuirea unei funcții responsabile pentru procesarea acelui eveniment. În mod normal, funcția care procesează evenimentul necesită informații despre evenimentul produs: cheia care a fost apăsată, poziția mouse-ului, elementul pe care evenimentul a produs, etc.
Obiectul event
este mecanismul definit de browsere pentru a oferi toate aceste informații. Este un obiect care este creat automat atunci când apare un eveniment și care este distrus automat când au fost executate toate funcțiile atribuite evenimentului.
Duminica specifică faptul că obiectul event
este singurul parametru care trebuie să meargă la funcțiile responsabile pentru procesarea evenimentelor. Prin urmare, în browserele care urmează standardele, obiectul poate fi accesat event
prin intermediul argumentelor funcției:
elDiv.onclick = function() { var elEvento = arguments;}
Este de asemenea posibil să se indice în mod explicit argumentul Nume:
elDiv.onclick = function(event) { ...}
Funcționarea browserelor care urmează standardele poate părea „magică”, deoarece în declarația funcției se indică faptul că are un parametru, dar în aplicație nu este transmis niciun parametru în această funcție. De fapt, browserele care urmează standardele creează automat acel parametru și le transmit întotdeauna funcției de manipulare a evenimentului.
15.4.1 Proprietăți și metode
Chiar dacă mecanismul definit de Browsere pentru obiectul event
este similar, există numeroase diferențe de îndată ce proprietățile și metodele obiectului.
15.4.1.1 Proprietăți definite de DOM
Tabelul următor colectează proprietățile definite pentru obiectul event
în browserele care urmează standardele:
Descrierea | ||||||
---|---|---|---|---|---|---|
iv id = „25a25a3701” | boolean | returnează dacă tasta și false În alt caz |
||||
Boolean | Indică dacă evenimentul aparține fluxului de evenimente de Bubbling | |||||
button |
întreg numărul | butonul mouse-ului care a fost apăsat.Valori posibile: 0 – nici un buton apăsat 1 – butonul a fost apăsat izquierdo 2 – Se ha pulsado el botón derecho 3 – Se pulsan a la vez el botón izquierdo y el derecho 4 – Se ha pulsado el botón central 5 – Se pulsan a la vez el botón izquierdo y el central 6 – Se pulsan a la vez el botón derecho y el central 7` – sunt presate în același timp 3 |
||||
cancelable |
Boolean | Indică dacă evenimentul poate anula | ||||
cancelBubble |
Boolean | Indică dacă fluxul de evenimente de tip Bubbling | ||||
a oprit charCode |
întreg numărul | codul unicode al caracterului corespunzător tastei pulsate | ||||
clientX |
Număr complet | Coordonate X a poziției mouse-ului față de zona vizibilă a | ||||
clientY |
număr întreg | coordonate și poziția de mouse re Schiță a zonei vizibile a | ||||
ctrlKey |
boolean | Returns Dacă tasta și false în alt caz |
||||
Numărul complet | Numărul de ori pe butoanele mouse-ului au fost apăsate | |||||
eventPhase |
Integer Numar | Faza la care aparține evenimentul: 0 – Captură de fază 1 – în elementul țintă 2 – fază Bubbling |
||||
isChar |
boolean | |||||
keyCode |
Integer Număr | Indică codul numeric al Tasta presată | ||||
metaKey |
Număr complet | Returns Dacă tasta și false în alt caz |
||||
pageX |
||||||
pageY |
coordonate și poziția mouse-ului în raport cu pagina | Funcția este utilizată pentru a anula acțiunea predefinită a evenimentului | ||||
IV ID = „051A1106A8” | ||||||
screenX |
x coordonează Poziția mouse-ului cu privire la ecranul complet | |||||
screenY |
întreg numărul | coordonate și poziția mouse-ului cu privire la ecranul complet | ||||
shiftKey |
boolean | returnează Dacă tasta și false Într-un alt caz |
||||
IV id = „10499C2151” | Funcție | este utilizat pentru a opri fluxul de evenimente de tip Bubbling | ||||
iv id = „011553281E” | element | elementul care provine evenimentul | ||||
timeStamp |
numărul | data și ora în care evenimentul | ||||
text String | Numele evenimentului |
Spre deosebire de ceea ce se întâmplă cu Internet Explorer, majoritatea proprietăților obiectului event
al soarelui citind. În mod specific, numai următoarele proprietăți sunt citite și scrie: altKey
, button
și keyCode
.
Tasta este o cheie specială care se află pe unele tastaturi de calculator foarte vechi. În prezent, în calculatoarele PC-ului este asimilată tastei Alt
sau tasta Windows, în timp ce pe computerele de tip Mac este asimilată la tasta Command
15.4.2 asemănări și diferențe între browsere
15.4.2.1 similitudini
În ambele cazuri, proprietatea tip este utilizată pentru a obține tipul de eveniment Adică:
94C7669542 „>
În timp ce manipulatorul evenimentului include prefixul on
în Numele dvs., tipul de eveniment returnat de proprietate type
Distribuie de la acel prefix.De aceea, în exemplul anterior compară valoarea sa cu click
și iv id = „AE9623538b” și nu cu onclick
și iv id = „1137307b14” .
O altă similitudine este utilizarea proprietății keyCode
pentru a obține codul corespunzător caracterului a cheii care a fost apăsată. Tasta pulsată nu reprezintă întotdeauna un caracter alfanumeric. Când apăsați tasta ENTER
, de exemplu, codul . Bara spațială corespunde codului 32
și tasta de ștergere are un cod egal cu .
a mai mult Modalitatea imediată de a verifica dacă au fost apăsate câteva taste speciale, este de a utiliza proprietățile shiftKey
, 25a25a3701 ” și ctrlKey
.
Pentru a obține poziția mouse-ului cu privire la partea vizibilă a ferestrei, sunt utilizate proprietățile clientX
și clientY
. În același mod, pentru a obține poziția indicatorului mouse-ului în raport cu ecranul complet, proprietățile sunt utilizate screenX
și iv id = „186083245a” .
15.4.2.2 Diferențe
Una dintre principalele diferențe este modul în care se obține elementul care provine evenimentul. Dacă un element <div>
este atribuit un eveniment onclick
, prin apăsarea cu mouse-ul interiorul <div>
Un eveniment al cărui obiectiv este originan este elementul <div>
// Internet Explorervar objetivo = elEvento.srcElement; // Navegadores que siguen los estandaresvar objetivo = elEvento.target;
O altă diferență importantă este faptul că se referă la obținerea caracterului corespunzător tastei pulsate. Fiecare tastă pulsată a asociat două coduri diferite: Primul este codul cheii care a fost apăsat și celălalt cod este cel care se referă la caracterul pulsat.
Primul cod este un cod cheie intern Pentru JavaScript. Al doilea cod coincide cu codul de caracter ASCII. În acest fel, litera a
are un cod intern egal cu 65
și un cod ASCII de 97
Pe de altă parte, litera A
are un cod intern, de asemenea, de 65
și un cod ASCII de 95
.
în Internet Explorer, conținutul proprietății keyCode
Depinde de fiecare eveniment. În evenimentele „cheie de presă” (onkeyup
și onkeydown
) Valoarea sa este egală cu codul intern. În „Scrieți cu chei” Evenimente (onkeypress
) Valoarea sa este egală cu codul ASCII al caracterului presat.
Dimpotrivă, în navigatorii care urmează Standardele de proprietate keyCode
este egal cu codul intern în evenimentele „de presă cheie” (onkeyup
și onkeydown
) și este egal cu 0
).
În practică, aceasta presupune că în evenimentele onkeyup
puteți utiliza aceeași proprietate în toate browserele:
function manejador(elEvento) { var evento = elEvento || window.event; console.log(" El código de la tecla pulsada es " + evento.keyCode);}document.onkeyup = manejador;document.onkeydown = manejador;
în acest caz, dacă pagina este încărcată în orice browser și apăsată, de exemplu, tasta A, următorul mesaj:
Figura 15.4 Mesaj afișat în browserul Firefox
Diferența mare are loc E Când încercați să obțineți caracterul care a fost apăsat, în acest caz litera a
. Pentru a obține scrisoarea, trebuie mai întâi să obțineți codul ASCII. După cum sa discutat, în Internet explorează valoarea proprietății keyCode
în eventual onkeypress
este egal cu caracterul ASCII:
function manejador() { var evento = window.event;
în browsere care nu sunt Internet Explorer, Codul precedent este egal cu 0
pentru orice pulsat cheie. În aceste browsere, în conformitate cu standardele, proprietatea ar trebui să fie utilizată charCode
, care returnează codul tastei pulsate, dar numai pentru evenimentul onkeypress
Odată obținut Codul în fiecare browser, funcția trebuie utilizată String.fromCharCode()
pentru a obține caracterul a cărui cod ASCII este trecut ca parametru. Prin urmare, soluția completă pentru obținerea cheii pulsate în orice browser este după cum urmează:
function manejador(elEvento) { var evento = elEvento || window.event; var codigo = evento.charCode || evento.keyCode; var caracter = String.fromCharCode(codigo);} document.onkeypress = manejador;
Una dintre cele mai interesante proprietăți este posibilitatea de a preveni finalizarea comportamentului normal al unui eveniment.Cu alte cuvinte, cu JavaScript este posibil să nu arătați niciun caracter atunci când este apăsată o cheie, nu trimiteți un formular după apăsarea butonului de expediere, nu încărcați nicio pagină apăsând un link etc. Metoda avansată de prevenire a unui eveniment de la funcționarea acțiunii asociate depinde de fiecare browser:
în modelul de bază al evenimentului prea este posibilă pentru a preveni comportamentul implicit al unor evenimente. Dacă, de exemplu, într-un element <textarea>
Următorul manipulator de evenimente este indicat:
<textarea onkeypress="return false;"></textarea>
În <textarea>
anterioare nu va fi posibilă scrierea de caractere, deoarece manipulatorul evenimentului returnează false
și aceasta este valoarea necesară pentru prevenirea Capetele de funcționare a evenimentului și, prin urmare, pentru a împiedica scrisoarea de la a fi scrisă.
Deci, este posibil să se definească mânerele de eveniment care returnează id = „493C597F59”> în funcție de unii parametri. De exemplu, un număr de caractere care pot fi scrise pot fi proiectate într-o <textarea>
<textarea onkeypress="return limita(100);"></textarea>
Funcționarea exemplului anterior este detaliată mai jos:
- evenimentul
onkeypress
pentru a controla dacă cheia este scrisă sau nu. - Valoarea returnată este returnată de funcția externă
limita()
la care valoarea Este trecut valoarea100
. - Dacă valoarea returnată de
limita()
este , evenimentul are loc în mod normal, iar caracterul este scris în<textarea>
. Dacă valoarea returnată delimita()
estefalse
, evenimentul nu apare și, prin urmare, caracterul nu este scris în<textarea>
> După verificare dacă numărul de caractere din<textarea>
este mai mare sau mai mic decât numărul maxim de caractere care sa întâmplat ca parametru.
Obiectul event
vă permite, de asemenea, să opriți complet execuția fluxului normal de evenimente:
// Navegadores que siguen los estandareselEvento.stopPropagation();
Prin oprirea fluxului de evenimente în așteptare, evenimentele care rămân din acel moment sunt supraidate până când toate elementele în așteptare sunt rulate până la elementul IV id = „6771ede959” .
15.5 Tipuri de evenimente
Lista completă a evenimentelor care pot fi generate într-un browser poate fi împărțită în patru mari g Rupees Specificația DOM definește următoarele grupe:
- Evenimente de mouse: ele provin când utilizatorul utilizează mouse-ul pentru a efectua unele acțiuni.
- Evenimente de tastatură: ele provin când utilizatorul presează Orice tastă de pe tastatura sa.
- HTML Evenimente: ele provin atunci când apar modificări în fereastra browserului sau când apar anumite interacțiuni între client și server O schimbare apare în structura DOM a paginii. Ele sunt, de asemenea, numite „evenimente de mutație”.
15.5.1 Evenimente de șoarece
Evenimente de șoarece sunt, cu multă diferență, cei mai mulți angajați din aplicații web. Evenimentele care sunt incluse în această clasificare sunt următoarele:
eveniment | Descriere |
---|---|
div id = „6C45DA3D8B”> | apare atunci când butonul stâng al mouse-ului este apăsat.De asemenea, apare atunci când focalizarea aplicației este localizată pe un buton și apăsați pe ENTER |
dblclick |
apare atunci când butonul stâng al mouse-ului |
mousedown |
apare atunci când orice buton al mouse-ului este apăsat |
mouseout |
apare atunci când indicatorul mouse-ului se află în interiorul unui element și utilizatorul mișcă indicatorul într-un loc din acel element |
iv id = „AE9623538B” | apare atunci când indicatorul mouse-ului este în afara unui element și utilizatorul deplasează indicatorul într-un loc în interiorul |
mouseup |
Apare atunci când este eliberat orice buton al mouse-ului care a fost apăsat |
mousemove |
apare atunci când Punterul sau mouse-ul este pe un element |
iv id =” 664F11230E ” | pe tastatură. De asemenea, apare continuu dacă este produs atunci când este tras o tastă corespunzătoare unui alfanumeric de la un alfanumeric al alfanumericului |
bb5c529da „> | |
---|---|
apare în obiectul ferestrei când pagina este complet încărcat. În elementul <img> cuando se carga por completo la imagen. En el elemento ` atunci când obiectul |
|
Apare în obiectul ferestrei când pagina dispare complet (atunci când închideți fereastra browserului). În elementul <object> când obiectul dispare. |
|
abort |
apare într-un element <object> când utilizatorul oprește descărcarea elementului înainte de a fi terminat |
error |
apare în obiectul ferestrei când apare o eroare JavaScript. În elementul <img> când imaginea nu a putut fi încărcată complet și în <object> când elementul nu se încarcă corect |
select |
apare atunci când sunt selectate mai multe caractere dintr-o casetă de text (<input> și iv id = „EA92971B26 |
IV ID =” 040C0DBF2E ” | Are loc Când o casetă de text (<input> și <textarea> ) pierd focalizarea și conținutul său a variat. De asemenea, apare când valoarea unui element <select> |
apare atunci când apăsați Pe un buton de resetare (<input type="reset"> ) |
apare în obiectul ferestrei când fereastra Navigator este redimensionată |
scroll |
apare în orice element care are un bară de defilare, când utilizatorul o folosește. Elementul <body> conține bara de defilare a paginii complete |
focus |
apare în orice element (inclusiv obiectul ferestrei) atunci când elementul primește | apare în orice element (inclusiv obiectul ferestrei) atunci când elementul pierde |
Una dintre cele mai utilizate evenimente este evenimentul load
, deoarece toate manipulările care sunt efectuate de DOM necesită ca pagina să fie încărcată integral și, prin urmare, copacul DOM a fost complet Construit > care pot fi folosite împreună cu evenimentul scroll
.
15.5.4 Evenimente Sun
Deși evenimentele de acest tip fac parte din Specificația oficială a Sun, nu au fost încă implementate în toate browserele.Următorul tabel colectează cele mai importante evenimente de acest tip:
eveniment | Descriere |
---|---|
div id = „4CDEE0C8EA”> | apare atunci când nodurile sunt adăugate sau șterse în subregele unui document sau |
DOMNodeInserted |
apare atunci când un nod este adăugat ca un copil de la un alt nod |
DOMNodeRemoved |
apare atunci când un nod este șters care este copilul de la un alt nod |
DOMNodeRemovedFromDocument |
apare atunci când un nod este șters |
DOMNodeInsertedIntoDocument |
apare atunci când un nod este adăugat la document |