Håndtering av hendelser i JavaScript
Denne artikkelen forklarer håndtering av hendelser i JavaScript.
YouTube Video
javascript-html-event.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <title>JavaScript & HTML</title>
6 <style>
7 * {
8 box-sizing: border-box;
9 }
10
11 body {
12 margin: 0;
13 padding: 1em;
14 padding-bottom: 10em;
15 font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
16 background-color: #f7f9fc;
17 color: #333;
18 line-height: 1.6;
19 }
20
21 .container {
22 max-width: 800px;
23 margin: 0 auto;
24 padding: 1em;
25 background-color: #ffffff;
26 border: 1px solid #ccc;
27 border-radius: 10px;
28 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
29 }
30
31 .container-flex {
32 display: flex;
33 flex-wrap: wrap;
34 gap: 2em;
35 max-width: 1000px;
36 margin: 0 auto;
37 padding: 1em;
38 background-color: #ffffff;
39 border: 1px solid #ccc;
40 border-radius: 10px;
41 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
42 }
43
44 .left-column, .right-column {
45 flex: 1 1 200px;
46 min-width: 200px;
47 }
48
49 h1, h2 {
50 font-size: 1.2rem;
51 color: #007bff;
52 margin-top: 0.5em;
53 margin-bottom: 0.5em;
54 border-left: 5px solid #007bff;
55 padding-left: 0.6em;
56 background-color: #e9f2ff;
57 }
58
59 button {
60 display: block;
61 margin: 1em auto;
62 padding: 0.75em 1.5em;
63 font-size: 1rem;
64 background-color: #007bff;
65 color: white;
66 border: none;
67 border-radius: 6px;
68 cursor: pointer;
69 transition: background-color 0.3s ease;
70 }
71
72 button:hover {
73 background-color: #0056b3;
74 }
75
76 #output {
77 margin-top: 1em;
78 background-color: #1e1e1e;
79 color: #0f0;
80 padding: 1em;
81 border-radius: 8px;
82 min-height: 200px;
83 font-family: Consolas, monospace;
84 font-size: 0.95rem;
85 overflow-y: auto;
86 white-space: pre-wrap;
87 }
88
89 .highlight {
90 outline: 3px solid #ffc107; /* yellow border */
91 background-color: #fff8e1; /* soft yellow background */
92 transition: background-color 0.3s ease, outline 0.3s ease;
93 }
94
95 .active {
96 background-color: #28a745; /* green background */
97 color: #fff;
98 box-shadow: 0 0 10px rgba(40, 167, 69, 0.5);
99 transition: background-color 0.3s ease, box-shadow 0.3s ease;
100 }
101 </style>
102</head>
103<body>
104 <div class="container-flex">
105 <div class="left-column">
106 <h2>HTML Sample</h2>
107 <div id="parentDiv">
108 <button id="myButton">Click me</button>
109 </div>
110 </div>
111
112 <div class="right-column">
113 <h2>Form Sample</h2>
114 <form id="myForm">
115 <input type="text" name="username">
116 <button type="submit">Submit</button>
117 </form>
118 </div>
119 </div>
120
121 <div class="container">
122 <h1>JavaScript Console</h1>
123 <button id="executeBtn">Execute</button>
124 <div id="output"></div>
125 </div>
126
127 <script>
128 // Override console.log to display messages in the #output element
129 (function () {
130 const originalLog = console.log;
131 console.log = function (...args) {
132 originalLog.apply(console, args);
133 const output = document.getElementById('output');
134 output.textContent += args.map(String).join(' ') + '\n';
135 };
136 })();
137
138 document.getElementById('executeBtn').addEventListener('click', () => {
139 // Prevent multiple loads
140 if (document.getElementById('externalScript')) return;
141
142 const script = document.createElement('script');
143 script.src = 'javascript-html-event.js';
144 script.id = 'externalScript';
145 //script.onload = () => console.log('javascript-html-event.js loaded and executed.');
146 //script.onerror = () => console.log('Failed to load javascript-html-event.js.');
147 document.body.appendChild(script);
148 });
149 </script>
150</body>
151</html>
Håndtering av hendelser i JavaScript
Håndtering av hendelser i JavaScript er en mekanisme for å utføre spesifikke handlinger som svar på brukeroperasjoner (for eksempel klikk og tastaturinnganger) eller nettleserhandlinger. Ved å sette opp hendelseslyttere kan du lage dynamiske og interaktive nettsider.
Grunnleggende om hendelser
Hendelser oppstår som svar på brukeroperasjoner og nettleserhandlinger. Når en hendelse oppstår, blir den tilknyttede hendelsesbehandleren (funksjonen) utført. For eksempel finnes det hendelser som disse:.
- Klikk (
click
) - Tastaturinngang (
keydown
,keyup
) - Musebevegelse (
mousemove
,mouseover
) - Skjemainnsending (
submit
) - Siden lastet ferdig (
DOMContentLoaded
) - Rulling (
scroll
)
Legge til hendelseslyttere
Hendelseslyttere settes opp ved bruk av metoden addEventListener()
. Denne metoden kaller en spesifikk funksjon når den angitte hendelsen inntreffer.
Grunnleggende syntaks for addEventListener()
1element.addEventListener(event, handler);
element
er HTML-elementet som overvåker hendelsen.event
er navnet på hendelsen (for eksempel,click
).handler
er funksjonen som kjøres når hendelsen inntreffer.
Hendelsesobjekt
Når en hendelse oppstår, sender JavaScript et hendelsesobjekt som inneholder detaljene til hendelsen til hendelseshåndtereren. Dette objektet inkluderer informasjon som hvilket element som utløste hendelsen, og hvilken tast som ble trykket.
Eksempel: Bruke hendelsesobjektet
1<button id="myButton">Click me</button>
1const button = document.getElementById('myButton');
2
3button.addEventListener('click', (event) => {
4 console.log(event); // Display event details in the console
5 console.log('Clicked element:', event.target); // Display the clicked element
6});
- Denne koden bruker hendelsesobjektet til å vise detaljert informasjon og det klikkede elementet i konsollen når knappen klikkes.
Typiske hendelser
Klikkhendelse
click
-hendelsen oppstår når brukeren klikker på et element.
1element.addEventListener('click', () => {
2 console.log('Clicked');
3});
- Denne koden viser en melding i konsollen når elementet klikkes.
Tastaturhendelser
keydown
- og keyup
-hendelser oppstår når brukeren trykker ned eller slipper en tast. Du kan bruke event.key
for å se hvilken tast som ble trykket.
1document.addEventListener('keydown', (event) => {
2 console.log(`Key pressed: ${event.key}`);
3});
- Denne koden viser navnet på tasten i konsollen når brukeren trykker på en tast.
Musehendelser
mousemove
- og mouseover
-hendelser oppstår ved musebevegelse og når markøren holdes over et element.
1document.addEventListener('mousemove', (event) => {
2 console.log(`Mouse position: X=${event.clientX}, Y=${event.clientY}`);
3});
- Denne koden viser posisjonen (X- og Y-koordinater) i konsollen hver gang musen beveger seg.
Skjemahendelser
Skjemarelaterte hendelser inkluderer submit
og input
. submit
-hendelsen skjer når et skjema sendes inn og forårsaker vanligvis en sideoppdatering, men event.preventDefault()
brukes ofte for å forhindre dette.
Eksempel: Forhindre sideoppdatering ved innsending av skjema
1<form id="myForm">
2 <input type="text" name="username">
3 <button type="submit">Submit</button>
4</form>
1const form = document.getElementById('myForm');
2
3form.addEventListener('submit', (event) => {
4 event.preventDefault(); // Prevent page reload
5 console.log('Form has been submitted');
6});
- Denne koden forhindrer at siden lastes på nytt når skjemaet sendes inn, og viser i stedet en melding i konsollen.
Hendelsesforplantning (Bubbling og Capturing)
Hendelser forplanter seg gjennom to faser: capturing-fasen, som beveger seg fra overordnede elementer til underordnede elementer, og bubbling-fasen, som beveger seg fra underordnede elementer til overordnede elementer.
Hendelsesbubbling
Som standard skjer hendelser på det innerste elementet og forplanter seg utover. Dette kalles bubbling.
Eksempel: Bubbling-eksempel
1<div id="parentDiv">
2 <button id="myButton">Click me</button>
3</div>
1const parent = document.getElementById('parentDiv');
2const button = document.getElementById('myButton');
3
4parent.addEventListener('click', () => {
5 console.log('Parent element was clicked');
6});
7
8button.addEventListener('click', () => {
9 console.log('Button was clicked');
10});
- I dette eksemplet, når du klikker på en knapp, skjer knappens hendelse først, etterfulgt av hendelsen til det overordnede elementet.
Hendelsescapturing
Ved å spesifisere true
som det tredje argumentet i addEventListener()
, kan du håndtere hendelser i capturing-fasen.
1parent.addEventListener('click', () => {
2 console.log('Capturing: Parent element was clicked');
3}, true);
- Denne koden håndterer overordnede elementets klikkhendelse i fangstfasen og viser en melding i konsollen.
Forhindre forplantning med stopPropagation()
Du kan stoppe hendelser fra å propagere ved å bruke event.stopPropagation()
.
1button.addEventListener('click', (event) => {
2 event.stopPropagation(); // Stop the event propagation
3 console.log('Button was clicked (no propagation)');
4});
- Denne koden forhindrer at hendelsen sprer seg når knappen klikkes og viser en melding i konsollen.
Fjerne hendelser
Du kan fjerne hendelseslyttere ved å bruke removeEventListener()
. For å fjerne en hendelseslytter, trenger du en referanse til funksjonen som er spesifisert i addEventListener()
.
1function handleClick() {
2 console.log('Clicked');
3}
4
5const button = document.getElementById('myButton');
6button.addEventListener('click', handleClick);
7button.removeEventListener('click', handleClick); // Remove the event listener
- Denne koden fjerner klikk-hendelseslytteren fra knappen slik at den ikke lenger håndteres når den klikkes.
Egendefinerte hendelser
I JavaScript kan du lage og utløse egendefinerte hendelser i tillegg til standardhendelser. Bruk CustomEvent
-konstruktøren.
1document.addEventListener('myCustomEvent', (event) => {
2 console.log(event.detail.message); // Displays "Hello!"
3});
4
5const event = new CustomEvent('myCustomEvent', {
6 detail: {
7 message: 'Hello!'
8 }
9});
10document.dispatchEvent(event);
- Denne koden oppretter og sender en egendefinert hendelse
myCustomEvent
og viser dens detaljer i konsollen.
Sammendrag
Hendelseshåndtering er et essensielt element for å forbedre interaktiviteten til nettapplikasjoner. Ved å bruke komponentene for hendelseshåndtering, kan du tilby en mer fleksibel og avansert brukeropplevelse.
- Hendelseslytter: Bruk
addEventListener()
for å tildele en hendelseshåndterer til et element. - Hendelsesobjekt: Når en hendelse oppstår, sendes et hendelsesobjekt som kan brukes til å hente detaljerte opplysninger.
- Hendelsespropagering: Hendelser propagere i to faser: bobling og fangst.
- Skjemahendelser og egendefinerte hendelser: Du kan håndtere skjemainnleveringer og dine egne egendefinerte hendelser.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.