Händelsehantering i JavaScript
Den här artikeln förklarar händelsehantering 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ändelsehantering i JavaScript
Händelsehantering i JavaScript är en mekanism för att utföra specifika åtgärder som svar på användaroperationer (såsom klick och tangentbordsinmatningar) eller webbläsaråtgärder. Genom att ställa in händelselyssnare kan du skapa dynamiska och interaktiva webbsidor.
Grundläggande om händelser
Händelser uppstår som svar på användaroperationer och webbläsaråtgärder. När en händelse inträffar körs den associerade händelsehanteraren (funktionen). Till exempel finns det följande händelser:.
- Klick (
click
) - Tangentbordsinmatning (
keydown
,keyup
) - Musrörelse (
mousemove
,mouseover
) - Formulärskickning (
submit
) - Sidladdning klar (
DOMContentLoaded
) - Rullning (
scroll
)
Lägga till händelselyssnare
Händelselyssnare ställs in med hjälp av metoden addEventListener()
. Den här metoden anropar en specifik funktion när den angivna händelsen inträffar.
Grundläggande syntax för addEventListener()
1element.addEventListener(event, handler);
element
är HTML-elementet som övervakar händelsen.event
är händelsens namn (till exempel,click
).handler
är funktionen som körs när händelsen inträffar.
Händelseobjekt
När en händelse inträffar skickar JavaScript ett händelseobjekt som innehåller information om händelsen till händelsehanteraren. Detta objekt innehåller information som vilket element som utlöste händelsen och vilken tangent som trycktes ned.
Exempel: Använda händelseobjektet
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});
- Den här koden använder händelseobjektet för att visa detaljerad information och det klickade elementet i konsolen när knappen klickas.
Vanliga händelser
Klickhändelse
click
-händelsen inträffar när användaren klickar på ett element.
1element.addEventListener('click', () => {
2 console.log('Clicked');
3});
- Den här koden visar ett meddelande i konsolen när elementet klickas.
Tangentbordshändelser
keydown
- och keyup
-händelser inträffar när användaren trycker ned eller släpper en tangent. Du kan använda event.key
för att se vilken tangent som trycktes ned.
1document.addEventListener('keydown', (event) => {
2 console.log(`Key pressed: ${event.key}`);
3});
- Den här koden visar namnet på tangenten i konsolen när användaren trycker på en tangent.
Musrelaterade händelser
mousemove
- och mouseover
-händelser inträffar vid musrörelse och svävning över ett element.
1document.addEventListener('mousemove', (event) => {
2 console.log(`Mouse position: X=${event.clientX}, Y=${event.clientY}`);
3});
- Den här koden visar positionen (X- och Y-koordinater) i konsolen varje gång musen rör sig.
Formulärhändelser
Formulärrelaterade händelser inkluderar submit
och input
. submit
-händelsen inträffar när ett formulär skickas och orsakar vanligtvis en sidomladdning, men event.preventDefault()
används ofta för att förhindra detta.
Exempel: Förhindra sidomladdning vid formulärinlämning
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});
- Den här koden förhindrar att sidan laddas om när formuläret skickas in och visar istället ett meddelande i konsolen.
Händelsepropagering (bubbling och capturing)
Händelser propagerar genom två faser: capturing-fasen, som går från föräldraelement till barnelement, och bubbling-fasen, som går från barnelement till föräldraelement.
Händelsebubbling
Som standard inträffar händelser vid det innersta elementet och propagerar utåt. Detta kallas för bubbling.
Exempel: Bubbling-exempel
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 detta exempel, när du klickar på en knapp, inträffar knappens händelse först, följt av föräldraelementets händelse.
Händelsecapturing
Genom att ange true
som det tredje argumentet i addEventListener()
kan du hantera händelser i capturing-fasen.
1parent.addEventListener('click', () => {
2 console.log('Capturing: Parent element was clicked');
3}, true);
- Den här koden hanterar föräldraelementets klick-händelse i capture-fasen och visar ett meddelande i konsolen.
Förhindra propagering med stopPropagation()
Du kan stoppa händelser från att spridas genom att använda event.stopPropagation()
.
1button.addEventListener('click', (event) => {
2 event.stopPropagation(); // Stop the event propagation
3 console.log('Button was clicked (no propagation)');
4});
- Den här koden förhindrar att händelsen propagerar när knappen klickas och visar ett meddelande i konsolen.
Ta bort händelser
Du kan ta bort händelsehanterare med hjälp av removeEventListener()
. För att ta bort en händelsehanterare behöver du en referens till funktionen som angavs 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
- Den här koden tar bort klick-händelselyssnaren från knappen så att den inte längre hanteras när den klickas.
Egna händelser
I JavaScript kan du skapa och trigga egna händelser utöver standardhändelser. Använd CustomEvent
-konstruktorn.
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);
- Den här koden skapar och avfyrar en anpassad händelse
myCustomEvent
och visar dess detaljer i konsolen.
Sammanfattning
Händelsehantering är ett viktigt inslag för att öka interaktiviteten i webbapplikationer. Genom att använda komponenterna för händelsehantering kan du ge en mer flexibel och avancerad användarupplevelse.
- Event Listener: Använd
addEventListener()
för att sätta en händelsehanterare på ett element. - Event Object: När en händelse inträffar skickas ett händelseobjekt som kan användas för att få detaljerad information.
- Event Propagation: Händelser sprids i två faser: bubbling och capturing.
- Form Events och Custom Events: Du kan hantera formulärinmatningar och skapa egna händelser.
Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.