Računalniki Windows internet

Dokumentirajte dogodke javascript. JavaScript - Vrste dogodkov. Dogodke povežite s pravimi elementi

Tema dogodkov je zelo pomembna in zelo zanimiva. Zahvaljujoč njej lahko naredite veliko zanimivih stvari, nad katerimi bo uporabnik navdušen. JavaScript dogodek je specifično dejanje, ki ga sproži bodisi uporabnik bodisi brskalnik. Dogodek je lahko na primer klik z miško na gumb, premikanje miške, fokus na element, sprememba vrednosti v nekem besedilnem polju, sprememba velikosti okna brskalnika itd.

Pripravila sem tabelo z vsemi dogodki (ki jih vsaj poznam). JavaScript... V njem boste najprej našli ime dogodka, elemente, ki lahko ustvarijo ta dogodek in opis samega dogodka. JavaScript dogodki.

Dogodek Predmet Vzrok za nastanek
PrekiniSlikaPrekinitev nalaganja slike
ZamegljenostIzguba fokusa elementa
Spremeni seFileUpload, Select, Text, TextareaSprememba vrednosti
KlikniteObmočje, Gumb, Potrditveno polje, Dokument, Povezava, Radio, Ponastavi, PošljiKliknite z miško na element
DblClickObmočje, dokument, povezavaDvokliknite na element
Povleci spustioknoPremakni se v okno brskalnika
FokusGumb, Potrditveno polje, Nalaganje datoteke, Okvir, Sloj, Geslo, Radio, Ponastavitev, Izberi, Pošlji, Besedilo, Textarea, OknoNastavitev fokusa na element
KeyDownPritisk tipke na tipkovnici
Pritisnite tipkoDokument, Slika, Povezava, TextareaDržanje tipke na tipkovnici
KeyUpDokument, Slika, Povezava, TextareaSprostitev tipke na tipkovnici
NaložiDokument, slika, plast, okno
MouseDownGumb, dokument, povezavaGumb miške je pritisnjen
MouseMoveoknoMiška v gibanju
MouseOutObmočje, plast, povezavaMiška je izven meja elementa
Prek miškeObmočje, plast, povezavaMiška je nad elementom
MouseUpGumb, dokument, povezavaGumb miške je sproščen
Premakni seOkvirPremikanje predmeta
PonastavitiOblikaPonastavitev obrazca
Spremeni velikostOkvir, oknoSpreminjanje velikosti
IzberiteBesedilo, TextareaIzbira besedila
PošljiOblikaPrenos podatkov
RaztovoritioknoRazlaganje trenutne strani

Zdaj pa ugotovimo, kako uporabite dogodke v JavaScriptu... Obstajajo tako imenovani obdelovalci dogodkov. Upravljavci dogodkov samo določite, kaj se bo zgodilo, ko se zgodi določen dogodek. Obdelovalci dogodkov JavaScript ima naslednjo splošno obliko:

OnNameEvents

To pomeni, da najprej pride predpona " na«, kaj je torej naslednje ime dogodka, na primer takšna obdelovalci dogodkov: onFocus, onClick, onSubmit itd. Mislim, da tukaj ni bilo vprašanj. In zdaj glavno vprašanje: " Kako uporabljam dogodke v JavaScriptu?". Področje njihove uporabe je ogromno, zdaj pa bomo z vami obravnavali eno težavo. Na strani so tri povezave. Vsaka od povezav je odgovorna za drugačno barvo ozadja (recimo bela, rumena in zelena) . Na začetku je ozadje belo. Ko premaknete miško nad določeno povezavo, se barva ozadja spremeni. Ko premaknete miško, se barva ozadja vrne na privzeto. Ko z miško kliknete povezavo, se barva ozadja ohrani kot privzeto.







Bela
Rumena
Zelena

Opravimo se s tem scenarijem oziroma s celoto HTML stran s podporo JavaScript in CSS(z drugimi besedami, to je primer DHTML). Na prvem mestu so običajni HTML oznake, s katerim se začne kateri koli HTML stran... Nato ustvarimo slog, v katerem zahtevamo, da so vse povezave na tej strani modre, podčrtane in da je kazalec miške na njih v obliki "kazalca". Lahko bi rekli: "Zakaj morate nastaviti slog? Konec koncev bodo povezave vseeno popolnoma enake." Tako je, povezave, ampak povezav kot takih nimamo (navsezadnje ni nobenega atributa href v oznaki), tako da bodo privzeto navadno črno besedilo (čeprav lahko kliknete tudi na besedilo). Zato je slog obvezen. Lahko ga odstranite in vidite, kaj se bo zgodilo. Še bolje, daj href atribut(kakršna koli vrednost, tudi prazna) in pojasnite, zakaj je skript prenehal delovati. Nadalje se že začne JavaScript... Ustvarimo spremenljivko privzeta_barva ki je odgovorna za privzeto barvo. Potem so tu tri funkcije:

Funkcija setTempColor () odgovoren za začasno spremembo barve.

Funkcija setDefaultColor () odgovoren za spreminjanje privzete barve.

Funkcija privzeta barva () nastavi privzeto barvo ozadja.

Nato so v obrazcu povezave z atributi obdelovalci dogodkov... Ko premaknete miško nad povezavo, Dogodek MouseOver, oz. onMouseOver obdelovalec dogodkov pokliče funkcijo setTempColor () in prenese ustrezen parameter. Ko odstranite miško iz elementa, Dogodek MouseOut, nato pa poklical funkcija defaultColor ()., zaradi česar je barva ozadja privzeta. In končno, ko kliknete na povezavo ( onClick obdelovalec) funkcija je poklicana setDefaultColor (), ki nastavi barvo, določeno v parametru, na privzeto barvo ozadja. Kot lahko vidite, je vse precej preprosto.

Bilo je načelo uporabe dogodkov v JavaScriptu, potem pa je vse odvisno samo od vaše domišljije!

Sposobnost JavaScripta za ustvarjanje dinamičnih strani html temelji na treh stebrih. Dva od njih smo že obravnavali v prejšnjih člankih. In tretji so dogodki.

  • Upravljanje okna brskalnika - z uporabo predmeta okna.
  • Upravljanje predmetov znotraj okna je DOM.
  • Izvajanje kode javaScript na dogodkih.

Dogodek- reakcija računalnika na dejanje uporabnika. Na primer, s T. Dogodek javaScript se šteje za pritisk na gumb na tipkovnici, premikanje in kliki miške ter zapiranje okna brskalnika. Vsi dogodki s t. javaScript generirajo dokumenti in objekti brskalnika (brez pojma 'uporabnik'). Na primer, ko kliknete na odstavek, dogodek klika miške ustvari predmet – odstavek.

Da bi lahko zagnali kodo javaScript, ki se odziva na dogodke, morate to kodo povezati z dogodkom, ustvarjenim iz določenega predmeta, t.j. z določenim dogodkom iz določenega predmeta. To dejanje se imenuje - naročnina na dogodek.

Naročnina pomeni, da funkcijo povežemo z določenim dogodkom iz določenega predmeta v objektnem modelu brskalnika. In ko ta objekt ustvari (generira) ta dogodek, se bo ta funkcija samodejno sprožila.

  • onclick - klik na gumb miške.
  • ondblclick - dvojni klik na gumb miške.
  • onmousedown - gumb miške je pritisnjen (dol).
  • onmousemove - miška se premakne čez predmet (pride se veliko dogodkov, premikanje miške za 1px = 1 dogodek).
  • onmouseout - miška zapusti predmet.
  • onmouseover - miška se premakne čez želeni predmet.
  • onmouseup - gumb miške se sprosti (dvigne navzgor).
  • onkeydown - gumb tipkovnice pritisnjen (dol).
  • onkeypress - pritisk na gumb na tipkovnici.
  • onkeyup - gumb tipkovnice se sprosti (dvigne navzgor).
  • onblur - izguba fokusa vnosa (utripajoči kazalec).
  • onfocus - trenutek, ko ta element prejme vhodno fokus.
  • onchange - ustvari kontrolnik po izgubi fokusa, če se je besedilo spremenilo (na primer v polju z besedilom). Izjema je element seznama 'izberi', pri katerem se ta dogodek ustvari takoj in ne po izgubi fokusa.
  • onload - ustvari se, ko se stran nalaga v oknu. Običajno se uporablja, ko morate zagnati kodo javaScript, potem ko se stran v celoti naloži.
  • onunload - pojavi se, preden se dokument razloži iz okna (tj. ko zapremo ta dokument ali preklopimo na drug dokument).
  • onreset - obrazec je bil ponastavljen.
  • onsubmit - podatkovni obrazec je bil oddan.

Naročnina na dogodke

  • Naročnina prek javaScript. Ta metoda se uporablja v večini primerov. Najprej moramo poiskati objekt elementa, za katerega se želimo naročiti na dogodek, na primer z metodo getElementById (določite id zahtevanega elementa).
funkcija myFunc () ( // ustvaril preprosto funkcijo opozorilo ("zdravo"); ) funkcija pageInit () (var p = document. getElementById ("1"); p. onclick = myFunc;) // klical funkcijo za sprožitev dogodka okno. onload = pageInit; // dogodek se bo sprožil, ko se stran naloži < p id= 1 >1. odstavek // nastavimo id za odstavek
  • Naročnina preko html kode. Pomanjkljivost te metode je, da zamaši html kodo s kodo javaScript; poleg tega obstaja več omejitev, v zapletenih primerih pa je neprimerna za uporabo.
< script type= "text/javascript" >funkcija myFunc () ( // ustvaril preprosto funkcijo opozorilo ("zdravo"); ) < p onclick= "myFunc()" >2. odstavek // pokliče funkcijo

Model ravnanja z dogodki

Ko pride do dogodka za kateri koli element, bi se morali podobni dogodki zgoditi za vse njegove nadrejene elemente do samega vrha strani (do 'telo', saj je to glavno področje dokumenta). Zato se bo vsak dogodek, ki se zgodi na strani, sprožil na telesu.

Potem se postavlja vprašanje, v kakšnem vrstnem redu se bodo zgodili takšni dogodki? V sodobnih brskalnikih se model obdelave dogodkov imenuje model mehurčkov. Njegovo bistvo: najprej se zgodi dogodek za element, ki je bil kliknjen, nato za njegov nadrejeni element in tako naprej do samega vrha - do "telesa".

Element -> element 2 -> dokument -> okno

Parametri dogodka (predmet dogodka)

Obstaja takšen predmet dogodek ki ima številne lastnosti. Z branjem teh lastnosti lahko dobite informacije o dogodkih. Če želite dobiti informacije, morate najprej dobiti sam predmet.

Glavni lastnosti tega predmeta:

  • x, y - koordinate miške v času dogodka.
  • clientX, clientY sta enaka.
  • offsetX, offsetY - enako, vendar je to odmik miške glede na nadrejeni element.
  • screenX, screenY - koordinate zaslona.
  • gumb - kateri gumb miške je bil pritisnjen (0 - ni pritisnjen, 1 - pritisnjen levi gumb, 2 - pritisnjen desni gumb, 4 - pritisnjen srednji gumb).
  • keyCode Številčna koda pritisnjene tipke na tipkovnici.
  • srcElement - element, ki je sprožil dogodek.
  • fromElement - element, s katerega se je miška premaknila.
  • toElement - indikacija predmeta, ki ga je miška povozila.
  • cancelBubble - nestandarden način, če mu date vrednost true, bo "pojavni mehurček" preklican; ali pa spremenite kodo tipke, ki jo je uporabnik pritisnil.

Od avtorja: Ko je spletna stran v celoti naložena in pripravljena, se v JavaScriptu sproži cela kaskada dogodkov, ki postanejo še večji, ko začne uporabnik tako ali drugače komunicirati s stranjo. Dogodki vključujejo nalaganje strani, pomikanje navzdol, klik na gumb ali celo izpolnjevanje obrazca. Če želite sprožiti dogodke v JavaScriptu, potrebujete posebno kodo, ki jo oblikujete in napišete sami, s čimer gradite globljo interakcijo.

Dogodke v JS lahko razdelimo v 4 velike skupine:

Dogodki uporabniškega vmesnika: sprožijo se, ko uporabnik komunicira z uporabniškim vmesnikom brskalnika (gumbi okoli spletne strani, ki so del vmesnika brskalnika). Ti dogodki lahko vključujejo tudi tista dejanja, ki jih stran izvede neodvisno od uporabnika. Ti dogodki vključujejo spreminjanje velikosti okna, pomikanje po strani ter nalaganje in razlaganje vsebine.

Dogodki tipkovnice, miške in zaslona na dotik: sproži se, ko uporabnik pritisne ali spusti gumbe na tipkovnici, nadzoruje miško, sledilno ploščico ali uporablja zaslon na dotik.

Fokus in hendikep dogodki. Večinoma povezano z obrazci: vnosno polje "prejme fokus", ko je uporabnik pripravljen na interakcijo z njim. Drugi dogodki spremljajo oddaje obrazcev, spremembe vrednosti polj obrazca itd.

JavaScript. Hiter začetek

Dogodki mutacij in opazovalci. Mutirajočim elementom se sledi, ko se struktura DOM spremeni: na primer, ko se elementi na strani vstavijo ali odstranijo s skriptom.

Vezava upravljalnika dogodkov

Koda po meri, ki se bo sprožila samo za določen element DOM, ustvari upravljalnik dogodkov. V JS lahko ustvarite upravljalnik dogodkov na tri načine:

1. Standardni obdelovalec dogodkov HTML prek atributov

Najstarejši način vezave dogodkov, eden najbolj uporabljenih doslej. Metoda uporablja posebne atribute v označevanju. Na primer:

< input type = "text" id = "username" onblur = "checkName()" >

V zgornjem primeru, ko polje prejme fokus in uporabnik nadaljuje z izpolnjevanjem naslednjega polja (na primer z uporabo TAB ali običajnega klika), bo element poklical funkcijo checkName, ki je napisana v JS.
Standardni obdelovalci dogodkov HTML niso priporočljivi za uporabo v sodobnem razvoju, predvsem zaradi dejstva, da je funkcionalnost pomešana z označevanjem, kar otežuje delo in odpravljanje napak kode.

2. Standardni obdelovalci dogodkov v DOM

Ta tehnika ločuje JS in označevanje, vendar ima isto omejitev – dogodkom je mogoče dodeliti samo eno funkcijo. Ekvivalent HTML obdelovalnika dogodkov v DOM bi bil:

var uporabniško ime = document.getElementbyId ("uporabniško ime"); username.onblur = checkName;

uporabniško ime. onblur = ime preverjanja;

JavaScript. Hiter začetek

Naučite se osnov JavaScripta s praktičnim primerom izdelave spletne aplikacije

Tako kot v prejšnjem primeru se funkcija checkName zažene, ko element obrazca izgubi fokus.

3. Poslušalci dogodkov

Sodobna metoda za dodajanje upravljalnika dogodkov, ki vam omogoča veriženje več dogodkov in funkcij:

var uporabniško ime = document.getElementbyId ("uporabniško ime"); username.addEventListener ("zamegljenost", checkName, false);

var uporabniško ime = dokument. getElementbyId ("uporabniško ime");

uporabniško ime. addEventListener ("zamegljenost", checkName, false);

Logična vrednost na koncu označuje, ali je treba dogodek zajeti. Običajno nastavljeno na false. V preprostih skriptih je dogodek pogosto zapisan kot anonimna funkcija:

var uporabniško ime = document.getElementbyId ("uporabniško ime"); username.addEventListener ("zamegljenost", funkcija () (// dejanja za sprožitev dogodka))

Vsi dogodki niso enaki

Pomembno je razumeti, da vseh dogodkov ni mogoče obravnavati na enak način. Dogodka pomikanja in spreminjanja velikosti se sprožita zelo pogosto, zato morate biti z njimi zelo previdni, da ne upočasnite delovanja skripta. Enako velja za na videz neškodljive vhodne dogodke. Zmogljivost skripta se lahko močno poslabša, če se poskuša nenehno odzivati ​​na pogosto sprožen vhodni dogodek na drsniku obsega.

Vsi dogodki se ne spremljajo

Opazovalci mutacij trenutno ne morejo slediti vsem spremembam vseh elementov na strani. Na primer, ni mogoče slediti spremembi višine elementa (ko se vsebnik v odzivnem oblikovanju skrči, se besedilo v njem prerazporedi in elementi postanejo daljši). Še vedno obstajajo načini za sledenje spremembam, o tem bom govoril v naslednjem članku.

Dogodke povežite s pravimi elementi

Dogodek onclick velja za številne elemente, vključno s povezavami. Obstaja splošno pravilo - povezavam ni priporočljivo dodajati kode JS. S klikom na povezavo naj uporabnik odide na drugo področje spletnega mesta ali na sidro. Če potrebujete element uporabniškega vmesnika, s katerim lahko nekaj spremenite na isti strani, potem vam bo gumb ustrezal. JavaScript lahko brez težav obesite na gumb.

Ne uporabljajte JavaScripta, če lahko to storite s CSS

V primerjavi s CSS je JavaScript počasen in nezanesljiv. V bistvu je treba CSS uporabljati kot alternativo zapletenemu skriptnemu ustvarjanju, kjer je to mogoče. Vendar CSS ne naredi vsega. Dobro opravi z: lebdenjem (v mnogih primerih nadomesti dogodke dotika) in lahko v nekaterih primerih zamenja tudi dogodke klikov z: target. Animacije CSS se samodejno sprožijo, ko se stran naloži, in obstajajo posebna stanja CSS, ki se lahko sprožijo za elemente, kot so izbirni gumbi. Vendar je nekaj bolj zapletenega običajno najbolje prepustiti JavaScriptu.

Med delom s stranjo uporabnik izvaja različna dejanja: klikne gumbe miške, vnese besedilo na tipkovnico. Vsako takšno dejanje je dogodek brskalnika. Lahko ga izsledijo in izvedejo določene vrstice programa, ko se pojavijo. JavaScript ima za to obdelovalce dogodkov. Poleg uporabniških dejanj obstajajo tudi drugi dogodki brskalnika, kot je nalaganje celotne strani.

Vsak dogodek ima svoje ime. klik je pritisk na levi gumb miške, tipka navzdol je pritisk tipke, fokus je fokus elementa obrazca,

Obravnava dogodkov

Pokliče se funkcija, ki se izvede, ko se dogodek sproži upravljalnik dogodkov... Vsaka vrsta dogodka ima svojega upravljavca. Ime upravljavca je sestavljeno iz besede on in imena dogodka. Na primer, upravljalnik dogodkov klika se imenuje onclick. Dogodki se ne dogajajo na strani na splošno, ampak na določenem elementu. V skladu s tem upravljavec ni ločena funkcija. Obravnavalec je nameščen na nekem elementu strani.

Elementu lahko dodelite upravljalnik dogodkov na različne načine. Upravljalca lahko dodelite prek atributa oznake. Koda, ki se izvede, ko se dogodek sproži, je zapisana v vrednosti atributa. Ustvarimo stran, ji dodamo gumb in ji dodelimo upravljalnik dogodka klika:

1
2
3
4
5
6
7

stran

JavaScript:

JavaScript:

17
18
19
20
21
22

var inform = funkcija () (opozorilo ("Drugi gumb");); var mbutton = document.getElementById ("mbutton"); mbutton.onclick = obvesti;

Ko je funkcija dodeljena upravljavcu, za imenom funkcije ni oklepajev. Če postavite oklepaje, potem to ne bo dodelitev funkcije, ampak klic za izvedbo.

Obstaja metoda addEventListener (), ki elementu dodeli tudi obdelovalca dogodkov. Velja za bolj moderno. Zdaj se ne uporablja prav pogosto, vendar obstajajo novi dogodki v JavaScriptu, ki jih je mogoče obravnavati samo s to metodo.

element.addEventListener (dogodek, funkcija)

Opcije:

dogodek - dogodek, ki ga je treba obdelati

funkcija - funkcija, ki postane upravljavec

V parametrih te metode je ime dogodka zapisano v narekovajih in vam ni treba pisati besede pred njim.

HTML koda:

JavaScript:

24
25
26
27
28
29

var newinform = funkcija () (opozorilo ("pritisnjen nov gumb");); var newbutton = document.getElementById ("newbutton"); newbutton.addEventListener ("klik", newinform);

Metoda removeEventListener () vam omogoča, da odstranite upravljalnik.

element.removeEventListener (dogodek, funkcija)

Z uporabo obravnavane metode je mogoče elementu dodeliti več upravljavcev za isti dogodek. Nato morate izbrisati vsako od njih posebej.

Objekt dogodka

Vsakič, ko se dogodek sproži, se ustvari objekt dogodka. Objekt vsebuje informacije o dogodku. Različne vrste dogodkov imajo različne predmete. Obstajajo pa tudi lastnosti, ki jih ima vsak predmet. Lastnost tipa na primer vsebuje vrsto dogodka.

Objekt dogodka se posreduje kot parameter funkciji, ki je upravljavec. Za dostop do predmeta morate v funkciji ustvariti parameter. Ta parameter se uporablja za sklicevanje na predmet. Če funkcija zahteva tudi druge parametre, mora biti objekt dogodka prvi parameter. Spremenimo upravljalnik za gumb z ID-jem enakim "button". Dostopimo do objekta dogodka. Namesto sporočila o pritisku na gumb bomo prikazali vrsto dogodka. Zdaj bo upravljalnik izgledal takole:

13
14
15
16

button.onclick = funkcija (dogodek) (opozorilo (vrsta dogodka););

S klikom na gumb se prikaže vrsta sproženega dogodka.

Vsi objekti dogodkov imajo lastnost currentTarget. Vrne element, ki je sprožil dogodek. To se morda zdi nesmiselno. Konec koncev je upravljalec dodeljen določenemu elementu. Zakaj bi ta element znova vračal? Toda z dogodki brskalnika so stvari nekoliko bolj zapletene. Kako se to uporablja, boste izvedeli malo kasneje. Pri preučevanju posebnih dogodkov bomo upoštevali druge lastnosti.

Vrste dogodkov

Na zori razvoja svetovnega spleta so se spletni razvijalci morali ukvarjati le z majhnim številom dogodkov: »nalaganje«, »klik«, »preklop miške« in drugi. Te dokaj stare vrste dogodkov dobro podpirajo vsi brskalniki. Ko se je spletna platforma razvijala, so bili vključeni močnejši API-ji in število dogodkov se je znatno povečalo. Ni standarda, ki bi definiral celoten nabor dogodkov, število podprtih dogodkov pa še naprej hitro raste. Ti novi dogodki so opredeljeni v naslednjih dveh virih:

    Specifikacija DOM Level 3 Events, ki se je po dolgih letih stagnacije začela aktivno razvijati pod okriljem konzorcija W3C.

    Številni novi API-ji v specifikaciji HTML5 (in z njimi povezane dodatne specifikacije) definirajo nove dogodke, ki se uporabljajo na primer za upravljanje zgodovine, povleci in spusti, izmenjavo sporočil med dokumenti ter predvajanje zvoka in videoposnetkov.

Upoštevajte, da veliko teh novih vrst dogodkov še ni široko podprtih in jih definirajo standardi, ki so še v fazi načrtovanja. Dogodki, ki jih boste najpogosteje uporabljali v svojih spletnih aplikacijah, običajno spadajo v kategorijo dolgotrajnih in jih podpirajo vsi brskalniki: to so dogodki za delo z miško, tipkovnico, obrazci HTML in objektom Window. Te dogodke bomo upoštevali.

Dogodki nalaganja dokumenta

Večina spletnih aplikacij nujno potrebuje spletni brskalnik, da jih obvesti, ko se dokument konča nalaganje in je pripravljen za izvajanje operacij na njem. Temu namenu služi dogodek obremenitev v objektu Window. Dogodek nalaganja se sproži šele, ko so dokument in vse njegove slike v celoti naložene. Vendar pa je skripte običajno mogoče zagnati takoj po razčlenjevanju dokumenta, preden se slike naložijo. Čas zagona spletne aplikacije lahko znatno skrajšate tako, da začnete s skriptnimi dogodki, ki niso nalaganje.

Dogodek DOMContentLoaded sproži se takoj, ko je bil dokument naložen, razčlenjevalnik ga razčleni in vsi odloženi skripti so bili izvedeni. Na tej točki se slike in skripti z atributom async morda še naprej nalagajo, vendar bo sam dokument pripravljen za izvajanje operacij. Ta dogodek je bil prvič predstavljen v Firefoxu in so ga od takrat sprejeli vsi drugi izdelovalci brskalnikov, vključno z Microsoftom, ki je dodal podporo za ta dogodek v IE9. Kljub predponi DOM v imenu ta dogodek ni del standarda dogodkov DOM Level 3, vendar je standardiziran s specifikacijo HTML5.

Ko se dokument naloži, se vrednost lastnosti document.readyState spremeni. Vsako spremembo vrednosti te lastnosti v IE spremlja dogodek readystatechange na objektu Document, zato se lahko v IE ta dogodek uporabi za določitev, kdaj pride do popolnega stanja. Specifikacija HTML5 standardizira dogodek readystatechange, vendar naroči, da ga sproži neposredno pred dogodkom nalaganja, zato ni povsem jasno, kakšna je prednost dogodka readystatechange pred obremenitvijo.

Spodnji primer definira funkcijo whenReady (). Funkcija, ki se posreduje v whenReady () se pokliče (kot metoda objekta Document), takoj ko je dokument pripravljen za izvajanje operacij. whenReady () posluša dogodke DOMContentLoaded in readystatechange in uporablja dogodek nalaganja le kot nadomestno, če se uporablja v starejših brskalnikih, ki ne podpirajo prvih dveh dogodkov. Funkcija whenReady () bo uporabljena v nekaterih od naslednjih scenarijev:

/ * Posredujte svojo funkcijo v whenReady () in poklicala jo bo (kot metodo predmeta dokumenta), takoj ko bo dokument razčlenjen in pripravljen za izvajanje operacij. Registrirane funkcije se kličejo ob prvem dogodku DOMContentLoaded, readystatechange ali nalaganju. Ko je dokument pripravljen in so poklicane vse funkcije, koReady () takoj pokliče vse funkcije, ki so mu bile posredovane. * / var whenReady = (funkcija () (// To funkcijo vrne funkcija whenReady () var funcs =; // Funkcije, ki jih je treba poklicati ob dogodku var ready = false; // Bo resnična, ko se kliče funkcija upravljalnika // Obravnavalec dogodka, ki se pokliče takoj, ko je dokument // pripravljen za izvajanje operacij. Obdelovalec funkcije (e) (// Če je bil upravljalnik že poklican, samo vrni kontrolnik, če (pripravljen) se vrne; // Če je ta dogodek je readystatechange in stanje je // odlično od "dokončano", kar pomeni, da dokument še ni pripravljen, če (e.type === "readystatechange" && document.readyState! == "complete") vrne; // Pokliči vse registrirane funkcije. // Upoštevajte, da je vsaka vrednost // lastnosti funcs.length enkrat preverjena, če ena od klicanih funkcij // registrira dodatne funkcije.for (var i = 0; i

Dogodki z miško

Z miško je povezanih kar nekaj dogodkov. Vsi so navedeni v spodnji tabeli. Vsi dogodki miške, razen mouseenter in mouseleave, se pojavijo. Dogodki klikov na povezavah in gumbi za oddajo obrazca imajo privzeta dejanja, ki jih je mogoče razveljaviti. Teoretično je mogoče preklicati dogodek kontekstnega menija in preprečiti prikaz kontekstnega menija, vendar imajo nekateri brskalniki nastavitve, zaradi katerih tega dogodka ni mogoče preklicati.

Dogodki miške JavaScript
Tip Opis
kliknite Dogodek na visoki ravni, ki se pojavi, ko uporabnik pritisne in spusti gumb miške ali kako drugače aktivira element.
kontekstni meni Preklicni dogodek, ki se sproži, preden se prikaže kontekstni meni. Trenutni brskalniki prikažejo kontekstni meni z desnim klikom, tako da lahko ta dogodek uporabite tudi kot dogodek klika.
dblclick Sproži se, ko uporabnik dvoklikne.
mousedown Sproži se, ko uporabnik pritisne gumb miške.
mouseup Sproži se, ko uporabnik spusti gumb miške.
mousemove Dvigne se, ko uporabnik premakne kazalec miške.
miško Dvigne se, ko je kazalec miške postavljen nad element. Lastnost relatedTarget (ali fromElement v IE) identificira element, iz katerega je bil premaknjen kazalec miške.
mouseout Dvigne se, ko kazalec miške zapusti element. Lastnost relatedTarget (ali toElement v IE) določa element, na katerega je bil premaknjen kazalec miške.
mouseenter Podobno kot pri premikanju miške, vendar se ne prikaže. Prvič se je pojavil v IE in je bil standardiziran v HTML5, vendar še ni podprt v vseh brskalnikih.
mišji pusti Kot mouseout, vendar se ne pojavi. Prvič se je pojavil v IE in je bil standardiziran v HTML5, vendar še ni podprt v vseh brskalnikih.

Objekt, posredovan obdelovalcem dogodkov miške, ima lastnosti clientX in strankaY ki določajo koordinate kazalca glede na okno. Če jih želite pretvoriti v koordinate dokumenta, jim morate dodati položaje drsnega traku okna.

Lastnosti altKey, ctrlKey, metaKey in shiftKey definirajo stanja različnih modifikacijskih tipk, ki so bile morda pritisnjene v času dogodka: z njimi je mogoče na primer razlikovati preprost klik od klika s pritisnjeno tipko Shift.

Lastnina gumb določa, kateri gumb miške je bil v času dogodka pritisnjen. Vendar pa različni brskalniki v to lastnost zapisujejo različne vrednosti, zato jo je težko uporabljati na prenosni način.

Nekateri brskalniki sprožijo dogodek klika le, ko kliknete levi gumb. Če torej želite upravljati klike drugih gumbov, uporabite dogodka mousedown in mouseup. Dogodek kontekstnega menija običajno signalizira, da je bil izveden klik z desno tipko miške, vendar, kot je navedeno zgoraj, ni vedno mogoče preprečiti, da bi se kontekstni meni prikazal v upravljalnikih tega dogodka.

Spodnji primer prikazuje funkcijo povleci (), ki ob klicu iz obdelovalca dogodkov mousedown omogoča uporabniku, da z miško povleče absolutno postavljene elemente dokumenta. Funkcija povleci () deluje z obema modeloma dogodkov, DOM in IE.

Funkcija povleci () sprejme dva argumenta. Prvi je predmet, ki se vleče. To je lahko element, ki je sprožil dogodek mousedown, in element, ki ga vsebuje (uporabniku lahko na primer dovolite, da zgrabi element, ki je videti kot naslov okna, in povleče vsebujoči element, ki je videti kot okno). Vendar pa mora biti v vsakem primeru element dokumenta, ki je absolutno pozicioniran z uporabo atributa položaja CSS. Drugi argument je objekt dogodka, prejet z dogodkom mousedown:

/ * povlecite () - povlecite in spustite absolutno postavljene elemente HTML. To funkcijo je treba poklicati iz obdelovalca dogodkov onmousedown. Naslednji dogodki mousemove bodo povzročili premikanje podanega elementa. Dogodek mouseup bo dokončal premik. Ta izvedba deluje tako v standardnih modelih dogodkov kot v IE. Uporablja funkcijo getScrollOffsets (). Argumenti elementToDrag: element, ki je prejel ali vsebuje dogodek mousedown. Ta element mora biti popolnoma nameščen. Vrednosti njegovih lastnosti style.left in style.top se bodo spremenile, ko bo uporabnik premaknil kazalec miške. dogodek: Objekt Event, ki ga prejme obdelovalec dogodkov mousedown. * / funkcija povleci (elementToDrag, dogodek) (// Pretvori začetne koordinate miške v koordinate dokumenta var scroll = getScrollOffsets (); // Spodaj deklarirana pomožna funkcija var startX = event.clientX + scroll.x; var startY = event. clientY + scroll.y; // Začetne koordinate (glede na začetek dokumenta) elementa, ki bo // premaknjen. Ker je elementToDrag absolutno pozicioniran, // se domneva, da se njegova lastnost offsetParent nanaša na dokument body var origX = elementToDrag.offsetLeft; var origY = elementToDrag.offsetTop; // Poiščite razdaljo med točko dogodka mousedown in zgornjim levim kotom elementa. // Ta razdalja bo upoštevana pri premikanju kazalca miške.var deltaX = startX - origX; var deltaY = startY - origY; // Registrirajte upravljalnike dogodkov mousemove in mouseup // ki sledijo dogodku mousedown.if (document.addEventListener) (// Standardni model dogodka // Registracija prestrezanje obdelovalcev v dokumentu document.addEventListener ("mousemove", moveHandler, true); document.addEventListener ("mouseup", upHandler, true); ) drugače if (document.attachEvent) (// model dogodkov IE za IE5-8 // V modelu dogodkov IE se dogodki prestrežejo s klicem // metode setCapture () elementa. elementToDrag.setCapture (); elementToDrag. attachEvent ("onmousemove", moveHandler); elementToDrag.attachEvent ("onmouseup", upHandler); // Razlaga izgube zajemanja dogodka miške kot dogodka mouseup elementToDrag.attachEvent ("onlosecapture", upHandler);) // Ta dogodek je bil obravnavana in se ne sme posredovati drugim obdelovalcem if (event .stopPropagation) event.stopPropagation (); // Standardni model else event.cancelBubble = true; // IE // Prepreči izvajanje privzetih dejanj. if (event.preventDefault) event.preventDefault (); // Standardni model else event.returnValue = false; // IE / * Ta upravljalnik ujame dogodke mousemove, ki se pojavijo med vlečenjem elementa. Odgovoren je za premikanje elementa. * / funkcija moveHandler (e) (če (! e) e = window.event; // Model dogodka IE // Premaknite element na položaj kazalca miške na podlagi položaja // drsnih trakov in odmikov glede na začetni klik.var scroll = getScrollOffsets ( ); elementToDrag.style.left = (e.clientX + scroll.x - deltaX) + "px"; elementToDrag.style.top = (e.clientY + scroll.y - deltaY) + "px"; // In prekinite nadaljevanje širjenja dogodka.if (e.stopPropagation) e.stopPropagation (); // Standardni model else e.cancelBubble = true; // IE) / * Ta upravljalnik prestreže zadnji dogodek miške, ki dokonča operacijo vlečenja. * / funkcija upHandler (e) (if (! e) e = window.event; // Model dogodka IE // Odstrani obdelovalce prestrezajočih dogodkov. if (document.removeEventListener) (// Model dogodka DOM document.removeEventListener ("mouseup" , upHandler, true); document.removeEventListener ("mousemove", moveHandler, true);) drugače if (document.detachEvent) (// IE 5+ model dogodka elementToDrag.detachEvent ("onlosecapture", upHandler); elementToDrag.detachEvent ( "onmouseup", upHandler); elementToDrag.detachEvent ("onmousemove", moveHandler); elementToDrag.releaseCapture ();) // In prekiniti nadaljnje širjenje dogodka. if (e.stopPropagation) e.stopPropagation (); // Standard model else e.cancelBubble = true; // IE)) // Vrne trenutne položaje drsnega traku kot lastnosti x in y funkcije objekta getScrollOffsets (w) (// Uporabi določeno okno ali trenutno, // če funkcija je poklicana brez argumenta w = w | | okno; // Naslednja metoda deluje v vseh brskalnikih razen IE različice 8 in spodaj if (w.pageXOffset! = null) vrne (x: w.pageXOffset, y: w.pageYOffset); // Za IE (in druge brskalnike) v standardnem načinu var d = w.document; if (document.compatMode == "CSSICompat") vrne (x: d.documentElement.scrollLeft, y: d.documentElement.scrollTop); // Za brskalnike v načinu združljivosti vrnitev (x: d.body.scrollLeft, y: d.body.scrollTop); )

Naslednji delček prikazuje, kako uporabiti funkcijo povleci () v datoteki HTML:

Povlecite me

To je preizkus. Preverjanje, preverjanje, preverjanje.

Najpomembnejši pri tem je atribut onmousedown na ugnezdenem elementu

... Upoštevajte, da uporablja lastnost this.parentNode. To pomeni, da se bo premaknil celoten vsebnik.

Dogodki vnosa besedila

Brskalniki podpirajo tri stare dogodke vnosa s tipkovnico. Dogodka s pritiskom na tipko in s pritiskom na tipko sta dogodka na nizki ravni in sta obravnavana v naslednjem razdelku. Vendar pa dogodek pritisk na tipko je na visoki ravni, ki označuje, da je bil vnesen znak za tiskanje.

Osnutek specifikacije dogodkov stopnje 3 DOM definira bolj posplošen dogodek vnos besedila ustvarjeno kot odgovor na vnos besedila, ne glede na to, kako je bilo vneseno.

S predlaganim dogodkom vnosa besedila in trenutno implementiranim dogodkom textInput se posreduje preprost objekt dogodka, ki ima lastnost podatkov, ki shrani vneseno besedilo. (Druga predlagana lastnost, inputMethod, bi morala definirati vir vnosa, vendar še ni bila implementirana.) Za vnos s tipkovnico bo lastnost podatkov običajno vsebovala en znak, ko pa jo vnesete iz drugih virov, lahko vsebuje veliko znakov. .

Objekt dogodka, poslan z dogodkom pritiska na tipko, ima bolj zapleteno organizacijo. Dogodek pritiska na tipko predstavlja vnos enega samega znaka. Ta znak je v objektu dogodka kot številčna vrednost kodne točke Unicode in morate uporabiti metodo String.fromCharCode (), da ga pretvorite v niz. V večini brskalnikov je kodna točka vnesenega znaka shranjena v lastnosti ključna koda predmet dogodka. Vendar Firefox zaradi zgodovinskih razlogov namesto tega uporablja lastnost charCode.

V večini brskalnikov se dogodek pritiska na tipko sproži le, ko vnesete znak za tiskanje. Vendar pa se v Firefoxu dogodek pritiska na tipko sproži tudi za znake, ki jih ni mogoče natisniti. Če želite razlikovati oba primera (in prezreti nenatisljive znake), lahko preverite, ali lastnost charCode objekta dogodka obstaja in vsebuje vrednost 0.

Dogodke vnosa besedila, vnosa besedila in pritiska na tipko lahko prekličete, da preprečite vnos znakov. To pomeni, da se ti dogodki lahko uporabljajo za filtriranje vhoda. Na primer, preprečite lahko vnos abecednih znakov v številsko vnosno polje.

Spodnji primer prikazuje modul JavaScript, ki izvaja tovrstno filtriranje. Išče predmete z dodatnim (nestandardnim) atributom data-allowed-chars. Registrira obdelovalce dogodkov textinput, textInput in tipke za vse najdene elemente in omeji vnos na znake regularnega izraza, določene v atributu data-allowed-chars:

/ * Filtriraj vnos za elemente Ta modul najde vse elemente v dokumentu, ki imajo atribut "data-allowed-chars". Registrira obdelovalce dogodkov za pritisk tipke, vnos besedila in textInput za te elemente, da omeji nabor znakov, ki jih je mogoče vnesti, da se omogoči vnos samo znakov, določenih v atributu. Če element ima tudi atribut "data-messageid", vrednost tega atributa se razlaga kot id drugega elementa v dokumentu. Če uporabnik vnese neveljaven znak, postane element s podanim ID-jem viden. Če uporabnik vnese veljaven znak, je element sporočila skrit. Ta element sporočila je namenjen prikazu pojasnila, zakaj je bil vnos uporabnika zavrnjen. Oblikovati ga je treba s CSS, tako da je na začetku neviden. * / whenReady (funkcija () (// Pokliči to funkcijo, ko je dokument naložen // Pridobi vse elemente var inputelts = document.getElementsByTagName ("vhod"); // Zaobidemo jih v zanki for (var i = 0; i< inputelts.length; i++) { var elt = inputelts[i]; // Пропустить элементы, не являющиеся текстовыми полями ввода // и не имеющие атрибута data-allowed-chars if (elt.type != "text" || !elt.getAttribute("data-allowed-chars")) continue; // Зарегистрировать наш обработчик события в этом элементе input // keypress старое событие и реализовано во всех браузерах. // textInput поддерживается в Safari и Chrome с 2010 года. // textinput версия проекта стандарта "DOM Level 3 Events". if (elt.addEventListener) { elt.addEventListener("keypress", filter, false); elt.addEventListener("textInput", filter, false); elt.addEventListener("textinput", filter, false); } // textinput не поддерживается версиями IE, в которых не реализован // метод addEventListener() else { elt.attachEvent("onkeypress", filter); } } // Обработчик событий keypress и textInput, фильтрующий ввод пользователя function filter(event) { // Получить объект события и целевой элемент target var e = event || window.event; // Модель стандартная или IE var target = e.target || e.srcElement; // Модель стандартная или IE var text = null; // Введенный текст // Получить введенный символ или текст if (e.type === "textinput" || e.type === "textInput") text = e.data; else { // Это было событие keypress // Введенный печатаемый символ в Firefox сохраняется в свойстве charCode var code = e.charCode || e.keyCode; // Если была нажата какая либо функциональная клавиша, не фильтровать ее if (code < 32 || // Управляющий символ ASCII e.charCode == 0 || // Функциональная клавиша (в Firefox) e.ctrlKey || e.altKey) // Удерживаемая клавиша-модификатор return; // Не фильтровать это событие // Преобразовать код символа в строку var text = String.fromCharCode(code); } // Отыскать необходимую нам информацию в этом элементе input var allowed = target.getAttribute("data-allowed-chars"); // Допустимые символы var messageid = target.getAttribute("data-messageid"); // Сообщение id if (messageid) // Если указано значение id, получить элемент var messageElement = document.getElementById(messageid); // Обойти в цикле символы во введенном тексте for(var i = 0; i < text.length; i++) { var c = text.charAt(i); allowed = new RegExp(allowed, "i"); // Создаем регулярное выражение if (c.search(allowed) == -1) { // Недопустимый символ? // Отобразить элемент с сообщением, если указан if (messageElement) messageElement.style.visibility="visible"; // Отменить действия по умолчанию, чтобы предотвратить вставку текста if (e.preventDefault) e.preventDefault(); if (e.returnValue) e.returnValue = false; return false; } } // Если все символы оказались допустимыми, скрыть элемент // с сообщением, если он был указан if (messageElement) messageElement.style.visibility = "hidden"; } });

Spodaj je vzorec oznake HTML z uporabo tega modula:

Prosimo, izpolnite obrazec.

Kontaktni podatki


Spodnja slika prikazuje uporabo tega obrazca. Tukaj sem po vnosu imena vstavil številko, ki je bila samodejno blokirana in pojavilo se je opozorilo:

Dogodka pritiska na tipko in vnos besedila se sprožita tik pred dejanskim vstavljanjem novega besedila v osredotočeni element dokumenta, tako da lahko njihovi upravljavci preprečijo vstavljanje besedila s preklicem dogodka.

Dogodek izvajajo tudi brskalniki vnos ki se sproži, ko je besedilo vstavljeno v element. Tega dogodka ni mogoče preklicati in njegov ustrezni objekt dogodka ne vsebuje informacij o vstavljenem besedilu – preprosto obvesti, da se je besedilna vsebina elementa spremenila. Če želite na primer zagotoviti, da so vneseni samo veliki znaki, lahko definirate upravljalnik vhodnih dogodkov, kot je prikazano spodaj:

Vhodni dogodek je standardiziran v specifikaciji HTML5 in ga podpirajo vsi sodobni brskalniki, razen IE. Podoben učinek je mogoče doseči v IE z zaznavanjem spremembe lastnosti vrednosti vnosnega besedilnega elementa z uporabo dogodka po meri sprememba lastnine.

Dogodki s tipkovnico

Razvoj tipko navzdol in ključ sproži se, ko uporabnik pritisne ali spusti tipko na tipkovnici. Ustvarjene so za modifikacijske tipke, funkcijske tipke in alfanumerične tipke. Če uporabnik drži tipko dovolj dolgo, da vklopi način samodejnega ponavljanja, bo ustvarjenih veliko dogodkov izklopa tipke, preden se zgodi dogodek vklopa tipke.

Objekt dogodka, ki ustreza tem dogodkom, ima lastnost ključna koda s številsko vrednostjo, ki označuje pritisnjeno tipko. Za ključe, ki generirajo znake za tiskanje, na splošno lastnost keyCode vsebuje kodno točko Unicode, ki ustreza osnovnemu znaku, prikazanemu na ključu. Tipke s črkami vedno generirajo vrednosti keyCode, ki ustrezajo velikim črkam, ne glede na stanje tipke Shift, saj so to znaki, prikazani na tipkah.

Podobno številske tipke vedno generirajo vrednosti keyCode, ki se ujemajo s številskimi znaki, prikazanimi na tipkah, tudi če ste držali tipko Shift, da vnesete ločilo. Za ključe, ki se ne ujemajo z znaki za tiskanje, bo lastnost keyCode imela drug pomen. Te vrednosti lastnosti keyCode niso bile nikoli standardizirane. Vendar se med brskalniki ne razlikujejo tako, da prenosljivosti ni mogoče zagotoviti.

Tako kot objekti dogodkov miške imajo tudi objekti dogodkov na tipkovnici lastnosti altKey, ctrlKey, metaKey in shiftKey to postane res, če je bila ustrezna modifikatorska tipka držana pritisnjena, ko je bil dogodek sprožen.

Dogodki keydown in keyup ter lastnost keyCode obstajajo že več kot desetletje, vendar nikoli niso bili standardizirani. Osnutek dogodkov 3. ravni DOM standardizira tipe dogodkov keydown in keyup, vendar ne standardizira lastnosti keyCode. Namesto tega definira novo lastnost, ključ, ki mora vsebovati ime ključa kot niz. Če se ključ ujema z natisljivim znakom, mora lastnost ključa vsebovati ta znak za tiskanje. Za funkcijske tipke mora lastnost ključa vsebovati vrednosti, kot so F2, Domov ali Levo.

Od tega pisanja ključna lastnost dogodkov DOM stopnje 3 še ni bila implementirana v noben brskalnik. Vendar pa brskalniki, ki temeljijo na Webkit, Safari in Chrome definirajo lastnost za te objekte dogodkov keyIdentifier... Za funkcijske tipke, kot je lastnost ključa, lastnost keyIdentifier ne vsebuje številke, temveč niz z imenom ključa, na primer Shift ali Enter. Za ključe, ki ustrezajo natisljivim znakom, ta lastnost vsebuje uporabniku manj prijazno nizovno predstavitev kodne točke znaka Unicode. Na primer, tipka A ustreza U + 0041.

Spodnji primer definira razred Keymap, ki identifikatorje bližnjic, kot so PageUp, Alt_Z in ctrl + alt + shift + F5, preslika v funkcije JavaScript, ki so poklicane kot odgovor na te pritiske tipk. Definicije povezav tipk se posredujejo konstruktorju Keymap () v obliki predmeta JavaScript, katerega imena lastnosti ustrezajo identifikatorjem bližnjic in katerih vrednosti lastnosti vsebujejo reference na funkcije upravljalnika. Vezi se dodajajo in odstranijo z uporabo metod bind () in unbind ().

Namesti predmet Keymap v element HTML (običajno objekt Document) z uporabo metode install (). Nastavitev predmeta Keymap registrira upravljalnik za dogodek keydown na tem elementu. Vsakič, ko pritisnete tipko, upravljavec preveri funkcijo, ki ustreza tej kombinaciji. Če funkcija obstaja, se pokliče.

Upravljavec dogodkov keydown uporablja lastnost ključa dogodkov 3 ravni DOM, če obstaja. V nasprotnem primeru poskuša uporabiti lastnost Webkit keyIdentifier. In kot nadomestni način, upravljavec uporablja nestandardno lastnost keyCode:

// Funkcija konstruktorske funkcije Keymap (vezi) (this.map = (); // Definiraj identifikator preslikave-> upravljalnik if (vezi) (// Kopiraj začetno preslikavo povezav vanj za (ime v vezavah) this.bind ( ime, vezi);)) // Veže podani identifikator ključa na podano funkcijo s strani upravljalnika Keymap.prototype.bind = function (key, func) (this.map = func;); // Odstrani vezavo za podani ID ključa Keymap.prototype.unbind = function (key) (izbriši this.map;); // Namesti ta predmet Keymap v podani element HTML Keymap.prototype.install = function (element) (var keymap = this; // Definiraj funkcije upravljalnika dogodkov obdelovalec funkcije (dogodek) (vrni keymap.dispatch (event, element);) // Nastavi if (element.addEventListener) element.addEventListener ("keydown", handler, false); else if (element.attachEvent) element.attachEvent ("onkeydown", handler);); // Ta metoda delegira upravljanje dogodkov tipkovnice na podlagi funkcije Keymap.prototype bindings.dispatch = (dogodek, element) (// Na začetku ni imen modifikatorskih tipk ali imen ključev var modifiers = ""; var keyname = null; / / Sestavite kanonične modifikacijske nize iz malih // znakov po abecednem vrstnem redu. If (event.altKey) modifikatorji + = "alt_"; if (event.ctrlKey) modifikatorji + = "ctrl_"; if (event .metaKey) modifikatorji + = " meta_"; modifikatorji if (event.shiftKey) + = "shift_"; // Ime ključa je enostavno dobiti, če je implementirana lastnost ključa, // definiran s standardom DOM Level 3: if (event.key) keyname = event.key; // Lastnost keyIdentifier // lahko uporabite za pridobitev imen funkcijskih tipk v Safariju in Chromu drugače if (event.keyIdentifier && event.keyIdentifier.substring (0,2)! == "U +") keyname = event. keyIdentifier; // V nasprotnem primeru lahko uporabite lastnost keyCode // in prikažete kodo> ime spodaj drugače ke yname = Keymap.keyCodeToKeyName; // Če imena ključa ni bilo mogoče določiti, prezrite dogodek // in se vrnite. if (! ime ključa) return; // Kanonični identifikator ključa je sestavljen iz imen modifikatorjev // in imena ključa z malimi črkami var keyid = modifiers + keyname.toLowerCase (); // Preverite, ali obstaja vezava za dani ID ključa var handler = this.map; if (obdelovalec) (// Če je upravljalnik za ta ključ, ga pokliči // Pokliči funkcijo upravljalnika var retval = handler.call (element, dogodek, ID ključa); // Če je obdelovalec vrnil false, prekliči privzeta dejanja / / in prekinite mehurčke dogodke if (retval === false) (if (event.stopPropagation) event.stopPropagation (); // DOM model else event.cancelBubble = true; // IE model if (event.preventDefault) dogodek. preventDefault (); / / DOM else event.returnValue = false; // IE) // Vrne vrednost, prejeto od obdelovalca return retval;)); // Pomožna funkcija za pretvorbo identifikatorja ključa v kanonično obliko. // Identifikator "meta" moramo pretvoriti v "ctrl", tako da bo // identifikator Meta-C "Command-C" na računalnikih Mac in "Ctrl-C" na vseh drugih. Keymap.normalize = funkcija (keyid) (keyid = keyid.toLowerCase (); // Male črke var words = keyid.split (/ \ s + | [\ - + _] /); // Izvleči modifikatorje var keyname = words . pop (); // ime ključa je zadnja beseda ime ključa = Keymap.aliases || ime ključa; // Ali je to vzdevek? words.sort (); // modifikatorji razvrščanja words.push (ime ključa); // Vrni normalizirano name return words .join ("_"); // Sestavite vse skupaj) Keymap.aliases = (// Preslikajte znane vzdevke ključev na njihova // "uradna" imena, ki se uporabljajo v DOM Level 3, in preslikajte kode tipk // na spodnja imena. Ime in vrednost morata biti sestavljena samo iz malih črk "escape": "esc", "return": "enter", "delete": "del", "ctrl": "control", "space" : "preslednica", "ins": "vstavi"); // Stara lastnost keyCode objekta dogodka keydown ni standardizirana // Toda naslednje vrednosti se lahko uspešno uporabljajo v večini brskalnikov in operacijskih sistemov. Keymap.keyCodeToKeyName = (// Tipke z besedami ali puščicami na njih 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Control", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Preslednica", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "Levo", 38: "Navzgor", 39: "Desno", 40: "Navzdol", 45: "Vstavi", 46: "Del", // Številske tipke na glavni tipkovnici (ne na sekundarni) 48: "0 ", 49:" 1 ", 50:" 2 ", 51:" 3 ", 52:" 4 ", 53:" 5 ", 54:" 6 ", 55:" 7 ", 56:" 8 ", 57: "9", // Črkovne tipke. Upoštevajte, da ni razlike // med velikimi in malimi črkami 65: "A", 66: "B", 67: "C", 68: "D" , 69 : "E", 70: "F", 71: "G", 72: "H", 73: "I", 74: "J", 75: "K", 76: "L", 77 : "M", 78:"N", 79:"O", 80:"P", 81:"Q", 82:"R", 83:"S", 84:"T", 85:" U " , 86: "V", 87: "W", 88: "X", 89: "Y", 90: "Z", // Številske tipke na dodatni tipkovnici in tipke z ločili. // ( Ni podprto v Operi.) 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7" , 104: "8", 105: "9", 106: "Pomnoži", 107: "Dodaj", 109: "S odvzemi ", 110:" Decimalno ", 111:" Deli ", // Funkcijske tipke 112:" F1 ", 113:" F2 ", 114:" F3 ", 115:" F4 ", 116: F5 ", 117 : "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 124: "F13", 125: " F14 ", 126: " F15 ", 127: " F16 ", 128: " F17 ", 129: " F18 ", 130: " F19 ", 131: " F20 ", 132: " F21 ", 133: F22 " , 134: "F23", 135: "F24", // Ločilne tipke, ki ne zahtevajo // držite tipko Shift za vstop. // Vezaja ni mogoče uporabiti na prenosen način: FF vrne // isto kodo kot za ključ odštevanja 59: ";", 61: "=", 186: ";", 187: "=", // Firefox in Opera vrneta 59,61 188: ",", 190: ".", 191: "/", 192: "` ", 219:" [", 220:" \\ ", 221:"] ", 222: "" ");

Primer uporabe predmeta Keymap je prikazan spodaj:

Window.onload = function () (var keymap = new Keymap; // Ustvari nov predmet Keymap keymap.bind ("ctrl + a", // Kombinacija Ctrl + A funkcija (event, keyid)) (opozorilo ("Pritisnil si: " + keyid))); // Druga vezava Ctrl + Enter keymap.bind ("ctrl + enter", funkcija (event, keyid) (opozorilo ("Pritisnil si:" + keyid))); keymap.install (dokument. body); // Nastavite predmet Keymap za celoten dokument);