Osa 2 – Nyt alkaa tapahtumaan

2.1 Tapahtumat

Esimerkki

Tekstiä klikkaamalla suoritetaan tapahtuma.

Kun klikkaat hiirellä tietokoneen näyttöä tai painat tietokoneen näppäimiä, saat aikaan tapahtuman. JavaScript-koodilla määritellään, mitä klikkauksesta tai näppäimen painamisesta tapahtuu.

2.2 Tapahtuma: Klikkaus

Ankka kuunteli, tapahtuuko hiiressä mitään.

Jotta tiedetään, missä klikkaus tapahtuu, on HTML-elementit merkittävä id-tunnisteella. Luodaan siis tekstielementti ja annetaan sille id-tunnisteeksi teksti: <p id=teksti>Klikkaa minua.</p>. Id-tunniste määritetään tagien sisällä käyttämällä määrettä id= ja yhtäsuuruusmerkin oikealla puolella on tunniste, joka elementille asetetaan.

JavaScript-koodissa luodaan kuuntelija, joka odottaa, milloin id-tunnistettua elementtiä klikataan eli milloin tapahtuma tapahtuu. Kuuntelija luodaan määrittämällä skriptielementin sisällä tapahtumakäsittelijä:

<p id=teksti>
    Klikkaa minua.
</p>
<script>
    teksti.onclick = () => {
    }
</script>

Tapahtumakäsittelijä määritetään id-tunnistetulle elementille kirjoittamalla piste elementin id-tunnisteen jälkeen ja pisteen jälkeen kirjoitetaan avainsana onclick. Tällä avainsanalla saamme tietää, milloin id-tunnistettua elementtiä klikataan. Avainsanan jälkeen määritetään hieman kummallisen näköinen funktiokutsun = () => { }. Funktioihin tutustutaan lisään osassa 6, mutta ohitetaan ne nyt ja käytetään rakennetta osana tapahtumakäsittelijää. Tärkein osa tästä osasta on viimeiset aaltosulkeet { }. Niiden sisälle kirjoitetaan se koodi, joka suoritetaan, kun id-tunnistettua elementtiä klikataan. Esimerkiksi jos tekstin klikkaamisen jälkeen halutaan tulostaa käyttäjälle lause "Onnittelut, klikkasit oikeaa paikkaa.", kirjoitetaan se aaltosulkeiden sisälle:

<p id=teksti>
    Klikkaa minua.
</p>
<script>
    teksti.onclick = () => {
        alert("Onnittelut, klikkasit oikeaa paikkaa.")
    }
</script>

Tehtävä

Kirjoita ohjelmaan koodi, jossa komennolla alert() tulostetaan "Ankat uivat lammessa.", kun tekstiä "Missä ankat uivat?" klikataan.

Tehtävä

Kirjoita ohjelmaan koodi, jossa alert()-komennolla tulostetaan "Höyhenpeite on myös vettähylkivä.", kun tekstiä "Ankkojen höyhenpeite on pehmeä." klikataan.

Id-tunniste

Id-tunniste annetaan HTML-elementille. Id-tunnistetta käytetään HTML-koodin ja JavaScript-koodin väliseen kommunikaatioon. Kun HTML-elementti tunnistetaan id-tunnisteella, niin siihen voidaan viitata JavaScript-koodissa.

Tehtävä

Ohjelmoija on unohtanut tästä koodista id-tunnisteen. Korjaa koodiin id-tunniste siten, että kun tekstielementtiä klikataan, niin tulostetaan JavaScript-koodin alert()-komento.

Tehtävä

Kirjoita ohjelmaan tekstielementti, jossa lukee "Koodiankat auttavat ihmisiä ohjelmoinnissa.". Anna tekstielementille tunnisteeksi "teksti". Lisää onclick-komento ja kirjoita sen sisälle alert()-komento, joka tulostaa tekstin "Lisäksi koodiankat ovat söpöjä.".

HTML-elementin tekstin vaihtaminen

Esimerkki

Tekstiä klikkaamalla teksti vaihtuu.

Id-tunnistetun tekstielementin sisältö eli sitä, mitä tekstielementissä lukee vaihdetaan käyttämällä id-tunnistetun tekstielementin komentoa textContent.

Painike

Esimerkki

Painikkeesta tapahtuu alert().

Esimerkki

Painiketta <button> painettaessa suoritetaan komento nappi.onclick.

on HTML-elementti, jota usein on tarkoitus klikata. Painikkeen määrittelävä tagi on <button>. Ilman JavaScript-koodia painikkeen klikkaamisesta ei tapahdu mitään. Painikkeen klikkausta kuunnellaan samalla tavalla, kuin muidenkin HTML-elementtien klikkausta. Tämä tarkoittaa sitä, että painikkeelle annetaan id-tunniste ja tämän jälkeen tunnistetulle painikkeelle tehdään tapahtumakäsittelijä skriptielementtiin.

<button id=painike>
    Painike
</button>
<script>
    painike.onclick = () => {
        alert("Klikkasit painiketta.")
    }
</script>

Tehtävä

Kirjoita ohjelma, joka tulostaa näytölle "Klikkasit painiketta".

Tehtävä

Lisää ohjelmaan id-tunniste painikkeelle. Huomaa, että id-tunniste tulee antaa myös .onclick-metodille.

Tehtävä

Tässä tehtävässä vaihdetaan <p id=teksti>-elementin tekstiä. Lisää komento, joka vaihtaa <p id=teksti>-elementin tekstin tekstiksi "Onnistuin!".

2.3 Tapahtuma: Näppäin

Esimerkki

Ohjelma odottaa, milloin käyttäjä painaa painiketta. Seuraavassa luvussa opimme, miten erotetaan, mitä näppäintä käyttäjä painoi. Esimerkissä tehdään aluksi tyhjä tekstielementti, joten kun painat lippukuvaketta mitään ei tule näkyviin. Oikean puolen ohjelmaikkunan voit aktivoida klikkaamalla sitä kerran.

Näppäimen painallusta kuunnellaan eri tavalla, kuin klikkaamista. Tämä johtuu siitä, että klikkaaminen kohdistuu tavallisesti johonkin elementtiin, mutta näppäimen painaminen ei yleensä liity mihinkään yksittäiseen elementtiin.

Luodaan ensin tekstielementti ja asetetaan sille id-tunniste, jolla tekstiä voidaan muuttaa, kun näppäintä painetaan.

<p id=teksti>
</p>

Lisätään skriptielementti ja kirjoitetaan sinne koko sivua kuunteleva tapahtumakäsittelijä:

<p id=teksti>
</p>
<script>
    document.onkeydown = event => {
    }
</script>

Tämä tapahtumakäsittelijä odottaa koko sivulla näppäimen painallusta, joten pisteen jälkeen tulee avainsana onkeydown. Tämän jälkeen teemme samantapaisen funktiokutsun, kuin klikkauksenkin tapauksessa, mutta lisäämme koodiin avainsanan event. Lopuksi aaltosulkeiden sisälle määritetään, mitä näppäimen painalluksessa tapahtuu. Määritetään, että näppäimen painalluksesta tekstielementin sisältöä muutetaan käyttämällä komentoa textContent.

<p id=teksti>
</p>
<script>
    document.onkeydown = event => {
        teksti.textContent = "Näppäintä painettiin."
    }
</script>

Tällä hetkellä mikä tahansa painike saa aikaan tapahtuman. Seuraavassa osassa opimme, miten voimme selvittää ehtojen avulla, mitä painiketta käyttäjä painoi.

Tehtävä

Tee ohjelma, joka vaihtaa tekstielementin tekstiksi "Voitit pelin.".

Tehtävä

Tee ohjelma, jossa näppäintä painettaessa näytölle tulostuu alert()-komennolla "PÖÖ!".

Opitut komennot

Komento Esimerkki Selitys
id = teksti <p id = teksti> Tekstillä on tunnisteena "teksti" Lisää tunnisteen HTML-elementille.
.onclick = () = {} teksti.onclick = () => { Odottaa käyttäjältä klikkausta asetettuun muuttujaan.
  //...  
  }  
textContent teksti.textContent = "Moikka moi! Vaihtaa id-tunnistetun muuttujan arvon.
<button id=nappi> <button id=nappi>Tämä on painike.</button> Luo painikkeen HTML-koodissa.
document.onkeydown = event => { ... } document.onkeydown = event => { Odottaa, milloin käyttäjä painaa näppäimistön painiketta.
  alert("Painoit näppäintä")  
  }