„JavaScript“ įvykių atpažinimo magija
Įvykiai yra esminis kodavimo komponentas tiems, kurie net šiek tiek eksperimentavo su JavaScript. Kaip rašyti kodą addEventListener pradėti veiksmus po konkrečių sąveikų, pvz., mygtuko arba klavišo paspaudimo, gali būti pažįstama patirtis. Jums gali būti įdomu, kaip „JavaScript“ visada atpažįsta, kad apdoroja įvykį, net tais atvejais, kai funkcijos argumento pavadinimas nėra deklaruojamas kaip „įvykis“.
Ypač tada, kai atrodo, kad įvykio objektas nėra aiškiai nurodytas, tai gali kelti nerimą. Pavyzdžiui, jums gali būti įdomu, kaip naršyklė nustato, kokią informaciją pateikti jūsų funkcijai ir kur renginys atsiranda rašant tokį kodą kaip document.addEventListener("keydown", function(event) {...}).
„JavaScript“ įvykių valdymo sistemoje yra tam tikrų paslėptų mechanizmų. Nepriklausomai nuo parametro pavadinimo, naršyklė automatiškai pateikia įvykio objektą atgalinio skambinimo funkcijai, kai pridedamas įvykių klausytojas. Tai garantuoja, kad funkcija visada gaus duomenis, reikalingus įvykiui valdyti.
Šiame įraše bus nagrinėjamas vidinis „JavaScript“ įvykių sistemos veikimas ir parodyta, kaip įvykiai identifikuojami ir perduodami, neatsižvelgiant į argumento pavadinimą.
komandą | Naudojimo pavyzdys |
---|---|
addEventListener() | Naudojant šią techniką, įvykių tvarkyklę galima prijungti prie konkretaus įvykio tipo (pvz., „keydown“). Jis užtikrina, kad įvykis būtų išgirstas, ir, kai jis įvyksta, inicijuoja paskirtą funkciją. |
KeyboardEvent() | Klaviatūros įvykių konstruktoriaus konstruktorius. Tai naudinga testuojant, nes leidžia kūrėjams programiškai pakartoti klaviatūros įvykį (pvz., klavišų nuspaudimą). |
event.key | Kai paspaudžiamas klavišas, ši savybė rakto reikšmę gauna iš įvykio objekto. Tai nurodo konkretų paspaustą klavišą, pvz., „a“, „Enter“ arba „Shift“. |
jest.fn() | Suklastota funkcija, sukurta naudojant Jest funkciją. Norint imituoti funkcijų iškvietimus ir ištirti jų elgseną neplėtojant visos logikos, tai ypač naudinga atliekant vienetų testavimą. |
dispatchEvent() | Naudojant šį metodą elemente įvykis gali būti suaktyvintas rankiniu būdu. Jis naudojamas visuose pavyzdžiuose, norint išsiųsti „keydown“ įvykį, kurį įvykių klausytojas gali perimti ir naudoti testavimui. |
expect() | Expect (), Jest testavimo sistemos komponentas, naudojamas patikrinti, ar reikšmė arba funkcija veikia taip, kaip tikėtasi. Ji patikrina, ar pavyzdyje pateikta įvykių tvarkytoja iškviečiama atitinkamu įvykiu. |
try...catch | Skyrius, skirtas klaidų šalinimui. Catch blokas paleidžiamas tuo atveju, jei bet koks trynimo bloko kodas sukelia klaidą, neleidžiant scenarijui sulaužyti. |
console.error() | Klaidų pranešimai spausdinami į konsolę naudojant šią komandą. Jis naudojamas išsamiai klaidų informacijai užregistruoti gaudymo bloke, o tai padeda pašalinti triktis. |
Kaip „JavaScript“ automatiškai atpažįsta įvykius įvykių klausytojuose
addEventListener yra viena iš svarbiausių „JavaScript“ funkcijų, skirtų valdyti vartotojo sąveiką. Naudojant šį metodą, įvykių tvarkytuvas gali būti prijungtas prie tam tikro įvykio tipo, pvz., „spustelėti“ arba „paspausti klavišus“. Naršyklė automatiškai siunčia įvykio objektą atgalinio skambinimo funkcijai, kai naudojate addEventListener. Visa informacija apie įvykį, įskaitant paspaustą klavišą ir spustelėjusį elementą, yra šiame objekte. Įdomu tai, kad naršyklė visada pateiks įvykio objektą, nepaisant parametro pavadinimo funkcijoje – „event“, „e“ arba „evt“.
Pirma, matome paprastą sąranką naudojant "keydown" įvykį aukščiau pateiktuose pavyzdžiuose. Naršyklė sukuria įvykio objektą ir siunčia jį atgalinio skambinimo funkcijai, kai vartotojas paspaudžia klavišą. Po to funkcija registruoja įvykį konsolėje, pateikdama visą susijusią informaciją, įskaitant klavišo paspaudimą ir papildomas įvykio charakteristikas. Svarbu atsiminti, kad jums nereikia aiškiai deklaruoti įvykio objekto, nes JavaScript jau atpažįsta, kad apdoroja įvykį pagal tipą, kurį nurodėte addEventListener.
Taip pat išnagrinėjome, kaip įprastas funkcijų išraiškas pakeisti rodyklėmis. Rodyklės funkcijos ir jų sutrumpinta sintaksė veikia taip pat: naršyklė visada duos funkcijai įvykio objektą, nesvarbu, kaip funkcija sukonstruota. Kad įvykių tvarkyklę būtų galima naudoti pakartotinai, ją taip pat moduliavome į atskirą metodą, pavadintą „handleKeyDown“. Dėl to kodas tampa aiškesnis ir lengviau prižiūrimas, nes ta pati funkcija gali būti susieta su daugeliu įvykių klausytojų arba pakartotinai naudojama įvairiose kodo dalyse.
Naudojant pabandyk... pagauk, buvo įdiegtas klaidų tvarkymas, siekiant dar labiau padidinti tvirtumą. Realioms programoms tai yra labai svarbi funkcija, nes ji padeda išvengti gedimų, jei tvarkant įvykius atsirastų nenumatytų aplinkybių. Pavyzdžiui, gaudymo blokas užregistruos klaidą, netrukdydamas likusiai scenarijai, jei įvykio objektas nebus suformuotas taip, kaip tikėtasi. Galiausiai, norėdami įsitikinti, kad tvarkytojas elgiasi taip, kaip tikėtasi, sukūrėme vieneto testą, kuris imituoja klavišų paspaudimo įvykius naudojant Jest. Didesniems projektams testavimas yra būtinas, nes jis užtikrina, kad įvykių tvarkymo funkcijos tinkamai veiktų įvairiose situacijose.
„JavaScript“ įvykių tvarkymo tyrinėjimas: kaip veikia įvykių parametrai
Priekinis „JavaScript“ su įvykių klausytojais vartotojo įvestims
// Approach 1: Basic event listener with "event" parameter
document.addEventListener("keydown", function(event) {
// The browser automatically passes the event object to this function
console.log(event); // Outputs the event object
});
// Explanation: The event object is implicitly passed to the function by the browser.
Rodyklės funkcijų naudojimas įvykiams tvarkyti „JavaScript“.
Front-end JavaScript su ES6 rodyklės funkcijomis
// Approach 2: Using ES6 arrow functions
document.addEventListener("keydown", (e) => {
// Arrow function also accepts the event object, regardless of its name
console.log(e); // Outputs the event object
});
// Explanation: The event object is still passed, even with the shorthand arrow function syntax.
Modulinis „JavaScript“: įvykių tvarkytuvas su pakartotiniu naudojimu
Modulinis „JavaScript“, skirtas daugkartinio naudojimo įvykių tvarkytojams
// Approach 3: Modularizing the event handler for reuse
function handleKeyDown(event) {
// Function to handle keydown event, reusable in other contexts
console.log("Key pressed:", event.key); // Logs the key that was pressed
}
// Attaching the handler to the keydown event
document.addEventListener("keydown", handleKeyDown);
// Explanation: Separate function increases modularity and reusability.
Įvykių tvarkymo patikimumo užtikrinimas naudojant klaidų valdymą
Optimizuotas „JavaScript“ su klaidų apdorojimu, kad būtų užtikrintas patikimumas
// Approach 4: Adding error handling for more robust event handling
function handleKeyDown(event) {
try {
// Attempt to process the key event
console.log("Key pressed:", event.key);
} catch (error) {
// Handle any potential errors
console.error("Error handling keydown event:", error);
}
}
document.addEventListener("keydown", handleKeyDown);
// Explanation: Adding try-catch blocks improves code reliability.
Įvykių valdymo testavimas naudojant vienetų testus
„Jest“ naudojamas „JavaScript“ vienetų testuose, siekiant patvirtinti įvykių klausytojus.
// Approach 5: Unit testing the event handler using Jest
const handleKeyDown = jest.fn((event) => {
return event.key; // Return the key for testing
});
// Simulate a keydown event in the test environment
test("handleKeyDown function receives keydown event", () => {
const event = new KeyboardEvent("keydown", { key: "a" });
document.dispatchEvent(event);
expect(handleKeyDown).toHaveBeenCalledWith(event);
});
// Explanation: Unit tests ensure the event handler behaves correctly.
Kaip įvykių platinimas veikia „JavaScript“ įvykių tvarkyme
Renginio propagavimas yra dar vienas svarbus JavaScript įvykių sistemos komponentas. Įvykis, toks „paspaudimas“ arba „paspaudimas“, ne tik įvyksta ir tuo nesibaigia. Jis ir toliau veikia. Atvirkščiai, jis seka komponentų išdėstymą įvykių sraute. Užfiksavimo fazė, tikslinė fazė ir burbuliavimo fazė yra trys šio srauto etapai. Dauguma įvykių pagal numatytuosius nustatymus yra burbuliavimo fazėje, o tai reiškia, kad jie plinta kaip bangavimo efektas nuo tikslinio elemento iki jo pirmtakų.
Naudojant tokias technikas kaip stopPropagation() ir stopImmediatePropagation(), „JavaScript“ kūrėjai gali reguliuoti įvykių plitimą. Pavyzdžiui, galite naudoti event.stopPropagation() sustabdyti įvykio burbuliavimą, jei nenorite, kad jis įvyktų aukščiau DOM hierarchijoje. Kai daugiau nei vienas elementas klauso to paties įvykio, bet norite, kad paleistų tik vienas konkretus tvarkytojas, tai tikrai naudinga.
Be to, vienas efektyvus būdas, kuriuo naudojamasi įvykių plitimu, yra įvykių delegavimas. Galite pridėti įvykių klausytoją prie pirminio elemento ir leisti įvykiams „burbuliuoti“ prie jo, o ne pridėti po vieną prie kiekvieno antrinio elemento. Tais atvejais, kai turite valdyti dinamiškai įvestų elementų įvykius, šis metodas yra labai efektyvus. Tai palengvina kodo administravimą ir sumažina atminties naudojimą, ypač programose, kuriose yra daug interaktyvių komponentų.
Dažni klausimai apie „JavaScript“ įvykius ir klausytojus
- Kas yra įvykių burbuliavimas JavaScript?
- Reiškinys, žinomas kaip „įvykių burbuliavimas“, apibūdina, kaip įvykis prasideda vidiniame DOM hierarchijos elemente ir juda aukštyn iki atokiausių komponentų.
- Kaip sustabdyti įvykių platinimą?
- Burbuliavimo fazėje galite sustabdyti įvykio tolesnį plitimą naudodami event.stopPropagation() technika.
- Koks skirtumas tarp stopPropagation() ir stopImmediatePropagation()?
- Renginiui burbuliuoti neleidžia stopPropagation(), ir neleidžiama jo atlikti kartu su vis dar dalyvaujančiais klausytojais stopImmediatePropagation().
- Kas yra „JavaScript“ įvykių delegavimas?
- Pridėdami įvykių klausytoją prie pirminio elemento, o ne kiekvieno atskiro antrinio elemento, galite naudoti įvykio delegavimo techniką. Tėvai yra informuojami, kai kažkas „iškyla“ iš vaikų.
- Ar galiu prie to paties įvykio pridėti kelis klausytojus?
- Iš tiesų, galite prijungti daugiau nei vieną įvykių klausytoją prie to paties įvykio tipo elemento „JavaScript“. Kiekvienam klausytojui bus iškviesta tokia seka, kokia jie buvo pridėti.
Paskutinės mintys apie įvykių tvarkymą „JavaScript“.
„JavaScript“ automatinio įvykių atpažinimo funkcija yra būtina šiuolaikiniam interneto kūrimui. Nepriklausomai nuo funkcijos pavadinimo, kalba atlieka tvarkymą klavišų paspaudimas ir spustelėkite įvykius lengviau, automatiškai suteikdami įvykio objektą.
Naudodami šią sistemą ir pažangiausius metodus, pvz., plitimo kontrolę ir įvykių delegavimą, kūrėjai gali efektyviai valdyti sudėtingas vartotojų sąveikas. Žinodami apie šiuos metodus galite kurti svetaines, kurios yra dinamiškesnės, interaktyvesnės ir labiau reaguoja į vartotojo įvestį.
„JavaScript“ įvykių tvarkymo šaltiniai ir nuorodos
- Išsami dokumentacija apie JavaScript addEventListener metodą ir įvykių objektų tvarkymą galite rasti adresu MDN žiniatinklio dokumentai – addEventListener .
- Norėdami išsamiai ištirti „JavaScript“ įvykių platinimą ir delegavimą, žr JavaScript.info – burbuliavimas ir fiksavimas .
- Suprasti pagrindines „JavaScript“ įvykių testavimo naudojant „Jest“ sąvokas Juokingi dokumentai .