Viikkotehtävä 7 ja DOM

Käsitellään viikkotehtävä 7 ja selvitellään DOM-esimerkkejä JavaScriptillä.

Luentotaltiointi

Ongelmia videon katselussa?

Viikkotehtävä 7

  1. tekijat.php levyt1.php
  2. levyt3.php levyt.php
  3. logiikkaa.php uusi.php indeksi.php levyt.php

DOM

JavaScript ja DOM mahdollistavat dokumenttipuun dynaamisen muokkauksen

JavaScript-työkaluja

MochiKit

MochiKit on kätevä JavaScript-kirjasto, jonka avulla on helppo tehdä eri selaimilla toimivaa JavaScriptiä. MochiKitistä kannattaa ladata versio (1.3), sillä siinä on tuki tapahtumien rekisteröintiä varten:

Toinen varteenotettava avoimen lähdekoodin JavaScript-kirjasto on Dojo Toolkit

JavaScriptin debuggaus

GreaseMonkey

GreaseMonkey on Firefox-laajennos, joka mahdollistaa JavaScript-koodin (user scripts) suorittamisen määrätyissä www-osoitteissa. GreaseMonkeyn, JavaScriptin ja DOM:in avulla voit siis muokata sivujen rakennetta aivan millaiseksi vain haluat!

Tarpeellisia funktioita

Aika

Päivämäärä

var aika = new Date();
alert(aika.getDate() + "." + aika.getMonth() + "." + aika.getYear());

ISO-päivämäärän (YYYY-MM-DD hh:mm:ss) saa Date-tyypin olioksi MochiKitin DateTime-metodeilla.

Kulunut aika

var aika = new Date();
var hetkiA_msec = aika.getTime();
// tehdään jotain
var hetkiB_msec = aika.getTime();
var kulunutaika = new Date(hetkiB_msec - hetkiA_msec);
alert(kulunutaika.getSeconds());

Ajastetut funktiot

// suoritetaan oma_ajastettu_funktio joka sekunti
window.setInterval(oma_ajastettu_funktio,1000);

Math

Pyöristäminen

var liukuluku = 3.245200004;
var kaksidesimaalia = Math.round(liukuluku*100)/100

Satunnaisluvut

var sanoja = ["Diiba","Daaba","Tesmaus","Heppa","Muuli","Saippuakauppias","Jepjep"];
var rand = Math.round(Math.random()*(sanoja.length - 1));
sanoja[rand];

eval

Funktiot: eval - Core JavaScript 1.5 Reference

Esimerkki:

// XHTML-dokumentissa
<p><span id="lasku">3 + 4</span> = <strong id="tulos"></strong></p>
// JavaScript-funktiossa
var yhteenlasku = document.getElementById("lasku").firstChild.nodeValue;
var tulos = eval(yhteenlasku);
document.getElementById("tulos").firstChild.nodeValue = tulos;

Toinen esimerkki:

// XHTML-dokumentissa
<p><input type="text" id="funktio" onchange="suorita" /></p>
// JavaScriptissä:
function ykkonen() {
  alert("Funktiossa ykkonen!");
}
function kakkonen() {
  alert("Funktiossa kakkonen!");
}
function suorita() {
  var funktion_nimi = document.getElementById("funktio").value;
  eval(funktion_nimi + "()");
}

eval on hidas verrattuna normaaliin laskutoimituksiin ja funktiokutsuihin

typeof

Operaattorit: typeof - Core JavaScript 1.5 Reference

var numero = parseInt(document.getElementById("tekstikentta").value);
if (typeof(numero) == NaN)
  document.getElementById("tekstikentta").className = "red";

Globaalit muuttujat

Luento 15

MochiKit

Tapahtumien rekisteröinti

Lomake-elementeille saadaan annettua tapahtumankäsittelijä seuraavasti:

connect("laheta","submit",oma_kasittelija);
connect("painikkeen_id","click",toinen_funktio);

Yhteen elementtiin voi liittää myös useita tapahtumankäsittelijöitä. Näiden suoritusjärjestystä tapahtuman yhteydessä ei ole kuitenkaan määrätty.

Oma funktio saa parametrikseen Event-tyyppisen olion ja käsittelijäfunktion sisällä this viittaa kutsuvaan XHTML-elementtiin. Tapahtuman jatkotoimenpiteet voi perua tapahtumankäsittelejässä preventDefault-metodilla:

function oma_kasittelija(event) {
  event.preventDefault();
}

Elementtien ja arvojen saanti

Tekstin käsittely DOM-puussa

Seuraavalla esimerkillä asetettua tekstiä tietyn elementin sisälle:

function setText(node, text) {
  replaceChildNodes(node, document.createTextNode(text));
}

IE-huomioita

Seuraavia ongelmia voi tulla IE:n JavaScriptin kanssa:

Esimerkkejä

Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/sovellukset/luennot/luento16/
© Jukka Mäntylä (jmantyla@mit.jyu.fi)< http://www.iki.fi/jmantyla/>
2006-04-30 14:26:02