JavaScript
JAVASCRIPTIIN LIITTYVÄÄ KOULUTUSTA VUONNA 2025!
Kurssit saatavilla kautta Suomen. Tule ja varaa oma koulutustapahtumasi heti! Koulutuksen järjestää asiantuntijasi Koulutus- ja konsultointipalvelu KK Mediat.
Tapahtumiin reagoiminen JavaScriptissä
HTML:n ja JavaScriptin välinen tapahtumien sitominen voidaan tehdä kahdella tavalla: :
- HTML:n sisäisillä tapahtuma-attribuuteilla, tai
- JavaScriptin tapahtumankuuntelijoilla.
Sisäiset tapahtuma-attribuutit ovat helppoja ja nopeita, mutta niiden käyttö voi tehdä koodista sekavaa ja hankalasti ylläpidettävää. Tapahtumankuuntelijat pitävät JavaScriptin erillään HTML:stä ja tarjoavat joustavuutta, mutta niiden käyttöönotto vaatii enemmän koodia ja voi olla haastavampaa aloittelijoille.
HTML:n tapahtuma-attribuuttien hyödyntäminen
Useimmat HTML-elementit tarjoavat mahdollisuuden määrittää nk. tapahtuma-attribuutteja. Tätä piirrettä hyödyntämällä on mahdollisuutta havaita esimerkiksi hiiren klikaukset, lomakkeen lähettämiset, näppäimistön painallukset sekä vuorovaikutus käyttäjän kanssa hyvin yksinkertaisesti.
Tapahtumat määritellään HTML-elementeissä käyttäen erityistä tapahtuma-attribuuttia, ja tapahtuman syntaksi näyttää seuraavalta:
<elementti tapahtumaAttribuutti="arvo">... </elementti>
Alla oleva esimerkki liittää onclick
-tapahtuman HTML-lomakkeen input
-elementtiin.
Kun käyttäjä klikkaa painiketta, suoritetaan checkMe
-funktio, jolle annetaan parametrina lomake-olio:
<input type="button" onclick="checkMe(this.form);">
Mobiililaitteilla tämä voidaan korvata kosketustapahtumalla:
<input type="button" ontouchstart="checkMe(this.form);">
Tapahtumankuuntelijat tyypeittäin
HTML tukee useita tapahtumatyyppejä eri päätelaitteille. Seuraavassa listauksessa on joitakin yleisimpiä HTML5-standardin mukaisia tapahtumatyyppejä:
- Sivuihin (tai kehyksiin) kohdistuvat tapahtumat
- Lomake-elementteihin kohdistuvat tapahtumat
- Näppäimistöön tapahtumat
- Hiiren tapahtumat
- Mobiililaitteiden kosketustapahtumat
Ikkunoihin (tai kehyksiin) kohdistuvat tapahtumat:
onload; sivun latautuminen
onunload; sivulta poistuminen
Lomake-elementteihin liittyvät tapahtumat:
onblur; kursorin poistuminen
onchange; lomakkeen kentän muutos
onfocus; fokuksen saaminen
onselect; lomakkeen kentän joutuminen valituksi
onsubmit; lomakkeen lähettäminen
onreset ; lomakkeen tyhjennys
Näppäimistötapahtumat
onkeydown; kun näppäin on alhaalla
onkeypress; kun näppäintä painetaan
onkeyup; kun näppäin vapautetaan
Näppäimistötapahtumat liittyvät fyysisen näppäimen painamiseen tai vapauttamiseen, ja niitä ei voi liittää kaikkiin HTML-elementteihin.
Hiiren tapahtumat
onclick; hiiren klikkaus
ondblclick; hiiren kaksoisklikkaus
onmousedown; kun hiiren painike on alhaalla
onmousemove; kun hiiri liikkuu elementin yllä
onmouseout; kun hiiri poistuu elementin yltä
onmouseover; hiiren liikkuminen elementin yllä
onmouseup; kun hiiren painike vapautuu
Hiiren tapahtumat ovat yleisiä käyttäjän interaktiotapahtumia. Nämä eivät myöskään ole käytettävissä kaikissa elementeissä.
Mobiililaitteiden kosketustapahtumat
ontouchstart: Kosketuksen alku
ontouchend: Kosketuksen päättyminen
ontouchmove: Kosketuksen liike (kosketuksen seuraaminen)
ontouchcancel: Kosketuksen peruminen
ontap: Yksinkertainen kosketus, joka vastaa klikkausta
Kosketustapahtumat ovat keskeisessä roolissa mobiiliystävällisten verkkosivustojen ja sovellusten kehittämisessä. On hyvä ymmärtää, että täyden laitetuen saamiseksi elementillä voi joskus olla useita rinnakkaisia tapahtumankuuntelijoita - esimerkiksi onclick ja on ontap.
Palautusarvon määrittäminen tapahtumalle - ja tapahtuman peruminen
Joidenkin tapahtumien yhteydessä halutaan määrittää palautusarvo return-rakenteellla. Tässä on kuitenkin riskin paikka, sillä jos palautusarvoksi annetaan true, tapahtuma toteutetaan ja jos palautusarvoksi annetaan false, tapahtuma estetään.
Esimerkiksi lomakkeen lähettämisen voi vahingossa tai tarkoituksella toteuttaa seuraavanlaisella koodilla:
<form action="kasittele.asp"
onSubmit="if (lomake.nimi.length != 0){return true;} else {return false;}">
Käytännön kannalta on kuitenkin suositeltavaa välttää return false
komennon käyttämistä tähän käyttötarkoitukseen.
Jos esimerkiksi lomakkeen lähettämisen (tai minkä tahansa muun tapahtuman) haluaa perua, JavaScriptin oliomalli tarjoaa Event-olioon liitetyn menetelmän preventDefault()
.
<form action="kasittele.asp"
onSubmit="if (lomake.nimi.length != 0){return true;} else {event.preventDefault();}">
EventListeners: Tapahtumien käsittely puhtaalla JavaScriptillä
eventListener-menetelmä on moderni ja suositeltava tapa liittää tapahtumia HTML-elementteihin. Se tarjoaa joustavuutta ja eristää JavaScriptin HTML:stä, mikä tekee koodista puhtaampaa ja helpommin hallittavaa. Tämä menetelmä mahdollistaa myös useiden tapahtumien liittämisen samaan elementtiin ilman, että vanhat tapahtumat korvataan.
AddEventListererin perussyntaksi
addEventListener()-metodin syntaksi on seuraava:
element.addEventListener(event, function, useCapture);
Edellä event on tapahtuman nimi (esim. click
, keydown
, load
, touchstart
), jolla tapahtumankuuntelija laukeaa.
function määrittää mikä koodi suoritetaan tapahtuman aikana, ja optionaalinen useCapture määrittää missä elinkaaren vaiheessa tapahtumaan tulisi reagoida.
<button id="myButton">Klikkaa minua</button>
document.getElementById("myButton").addEventListener("click", function() {
console.log("Painiketta on klikattu!");
});
document.getElementById("myButton").addEventListener("mouseover", function() {
console.log("Hiiri liikkuu painikkeen päällä!");
});
Tapahtumankuuntelijan poistaminen
Jos haluat poistaa tietyn tapahtumakuuntelijan myöhemmin, voit käyttää removeEventListener
-metodia.
Alla olevassa esimerkissä painike reagoi hiiren klikkiin vain yhden kerran:
function handleClick() {
alert("Klikattu!");
}
button.addEventListener("click", handleClick);
// Tapahtuman poisto
button.removeEventListener("click", handleClick);