Jesse James Garrett(2005): AJAX - A new Approache to Webapplications
Wikipedia documents about:
DHTML = HTML+CSS+JavaScript+DOM
The three-legged stool
- Structure (HTML)
- Style (CSS)
- Behavior (JavaScript)
HTML til struktur, CSS til præsentation og JavaScript til dynamik (behavior) i browseren
Javascript is a wonderful tool to enhance the usability of web sites.
It is the extra layer above the mark-up "what is this text" and the CSS "how should it be displayed".
Javascript adds a new dimension, the "how should this element behave".
The idea of progressive enhancedment. Best practice (From Jeremy Keith's book DOM scripting )
Introduktion til JavaScript (use google translator for english version :-)
XHTML og CSS leverer en statisk gengivelse af en side. Her ændrer indholdet på siden sig ikke. Anderledes med anvendelse af scriptsprog. Her er det muligt at ændre indholdet dynamnisk over tid, eller ændre det som et resultat af bestemte handlinger (eng. events).
JavaScript - der oprindeligt hed oprindeligt LiveScript, og før det Mocha - blev udviklet af NetScape Communications. Skønt navnelighed er det et helt andet sprog en programmeringssproget Java som det kun har lidt til fælles med. Java er et kompileret sprog, JavaScript et fortolket sprog, og mens Java er et objektorienteret sprog, er JavaScript objektbaseret og bygger på ideen om prototyper. Ligheden mellem de to sprog bygger på deres fælles gæld til C sprogets syntaks.
JavaScript består af to hovedkomponenter:
- JavaScript kernen
- Dokumentobjekterne, der er baseret på Dokument Objekt Modellen (DOM)
JavaScript kernen består af det område inden for sproget som det i hovedsagen strukturelt set deler med andre programmeringssprog. Det består af elementer som:
- Variable
- Datatyper (loose typed)
- Operatorer
- Kontrolstrukturer (if/else, for, while)
- Funktioner
Dokumentobjekterne (DOM) består af et hierarki browserspecifikke objekter som:
- document objektet
- form objeket
- image objektet
- location objektet
- link objektet
- samt head, title, link, body, p, h1, h2, h3, div etc obhekter
Dokument Objekt Modellen (DOM) er hierarkisk, svarende til den hierarkiske opbygning af et XHTML-dokument, hvor de enkelte elementer er indlejret i hinanden og topknudepunktet er det første, oprindelige vindue.
Billedligt talt kan man sammenligne sprogets kerneområde med ledninger eller kabler, der forbinder og styrer den dynamiske afvikling af DOM's komponenter.
Det betyder bl.a. at JavaScript kernen og DOM kan tænkes uafhængigt af hinanden. Man kan fx forestille sig JavaScript kernen anvendt til andre formål. Rent faktisk har JavaScript har været anvendt sammen med ASP til serverside programmering. Tilsvarende kan man forestille sig DOM komponenterne forbundet med andre sprog. Det er fx tilfældet for Internet Explores vedkommende, hvor dokumentobjekterne i denne browser også kan programmeres med VBScript (VisualBasic Script).
DOM betyder bl.a., at JavaScript programmøren har mange præfabrikerede komponenter til sin rådighed. Uden disse browserbaserede objekter måtte programmøren selv bygge objekterne op fra grunden. Situationen svarer lidt til at gå i en hobbyforretning og fx købe et samlesæt til et modelfly, frem for selv at opbygge de enkelte dele fra grunden. Mens programmøren tidligere typisk byggede det hele op selv, har JavaScript programmøren allerede en lang række komponenter (DOM) til sin rådighed.
Når man derfor ofte læser, at JavaScript er et objektorienteret sprog, er det ikke helt korrekt. Man kan ganske vist også i JavaScript definere sine egne objekter, men et af JavaScipts centrale karakteristika er netop, at en lang række browserbaserede objekter er defineret på forhånd. Det er derfor mere korrekt at betegne JavaScript som et objektbaseret sprog.
Eksempler på anvendelse af Javascript
- Hjælp af brugeren: Validering af forms, beregninger udfra valg.
- Rich Internet Applications (RIA's) via AJAX ( Asynkron Javascript og XML ).
- Igoogle applicationer , widgets m.m.
- maps.google.com
- Admin delen på f.eks. Wordpress, Joomla m.m.
Afvikling af JavaScript
For at skrive JavaScript er en simpel teksteditor som fx Notepad tilstrækkelig. Det kan dog være en god ide, at anvende en editor med farvekodning som fx Notepad++ eller HomeSite. Det er også muligt af anvende et mere avanceret IDE (Integrated Development Environment) som fx Dreamweaver eller Aptana, der et et opensource IDE og specialudviklet til netop JavaScript.
Document objektet
Dokument objektet er en hierarkisk model af det aktuelle HTML-dokument.
Figur 1.3: Hierarki af DOM objekter (kilde: Yanks & Adams: Simply JavaScript. SitePoint 2007)
Når man refererer til det enkelte objekt (element) gøres det nemmest ved at give objektet en unik id. f.eks. <h1 id="vigtig">Hello</h1> eller
<input type="text" name="kundenavn" id="kundenavn" value="Indtast dit navn " / >document.getElementById("kundenavn")
man kan også referere til et tag via
document.getElementByTag("h1");
eller via dot syntaks.
window.document.body.h1;
<form id="bestilling">
<input type="text" name="kundenavn" id="kundenavn" value="Indtast dit navn " / >
<input type="button" onclick="visInput();" value="click" />
</form><script type="text/javascript">
function visInput(){
alert("Yo "+document.getElementById('kundenavn').value);
}
</script>
Tekstfelt objektet med id-værdien (instansnavn) kundenavn har egenskaben value. Den bliver aflæst ved at angive egenskabens navn umiddelbart efter objektreferencen.
Vi kunne også med JavaScript have ændret værdien af indtastningsfeltets kundenavn og selektere (markere) indtastningsfeltet efter alert boksen er vist:
function visInput(){
alert("Yo "+document.getElementById('kundenavn').value);
document.getElementById('kundenavn').value = "Indtast nyt navn";
document.getElementById('kundenavn').select();
}
Events
En event udløses af en brugerbestemt handling i browseren. Klikker brugeren fx på en musetast eller trykker på en tast udløses en event. Når disse events finder sted, kan man via JavaScript bede om at få udført forskellige handlinger. Det sker ved at indsætte en såkaldt eventhandler. Eventhandlere bliver knyttet til et objekt i DOM, så eventhandleren aktiveres i det øjeblik den handling, som eventhandleren er beregnet til at spore, finder sted i relation til objektet.
Det er eventhandlerne der er interessante her, for uden dem ville de indtrufne events ikke blive opfanget, og de ville dermed ikke udløse noget som helst. Er der derimod en eventhandler knyttet til objektet, kan eventhandleren sættes til at udføre en stump JavaScript kode eller et kald til en JavaScript funktion, i det øjeblik eventen finder sted.
En eventhandler er således knyttet til et objekt i DOM. Eventhandlere er lette at genkende, fordi de altid er forsynet med prefikset on.
<button onclick="alert('Boo!');">Click me</button>
<a href="#" onclick="alert('Boo!');">Click me</a>
Eventhandlers
Herunder ser du en liste med de mest almindelige events i JavaScript og de tilsvarende eventhandlere. Du får samtidig en angivelse af, hvornår de udløses, og hvilke elementer de er knyttet til. Du skal dog være opmærksom på, at i nyere browsere kan de viste events anvendes sammen med en del flere objekter end dem, der er nævnt her.
Event Genereres af Handlingen udløses når Event handlerens navn abort image Brugeren afbryder indlæsningen af et billede onabort blur window og form elementer Et formelement, en frame eller et vindue mister fokus onblur change text field, text area og select liste Værdien ændres og elementet mister fokus onchange click checkbox, radio knap, submit knap, reset knap, knap (button) og link Der klikkes på formelementet eller linket onclick dragdrop window Et objekt, fx en fil trækkes ind over og slippes i et vindue ondragdrop error image og window Der opstår en fejl under indlæsning af et billede eller et dokument onerror focus window og form elementer Et formelement, en frame eller et vindue får fokus onfocus keydown document, image, link og textarea En tast trykkes ned på tastaturet onkeydown keypress document, image, link og textarea En tast trykkes ned og holdes nede onkeypress keyup document, image, link og textarea En tast frigives onkeyup load document En webside læses ind i browseren onload mousedown document, button, link En museknap trykkes ned onmousedown mousemove ingen objekter Markøren bevæger sig onmousemove mouseout link, image Markøren forlader et område eller et link onmouseout mouseover link, image Markøren bevæger sig ind over et område eller et objekt onmouseover mouseup document, button, link En museknap frigives onmouseup move window Et vindue flyttes onmove reset reset knappen i en form Der trykkes på reset knappen i en form onreset resize window Et vindue ændre størrelse onresize select text felt, text area og selectliste Et element vælges onselect submit submit knappen i en form Der trykkes på submit knappen i en form onsubmit unload document En webpage forlades onunload
Browser events demo (Fra grundbogen)
Eksempler på anvendelse
Event Anvendelse onblur Lukke popup vinduer når de mister fokus onchange Løbende formvalidering af enkeltelementer onclick Udløser handlinger i forbindelse med tryk på knap, etlink eller et tekstfelt. onload Et script som udføres, når en side loades, fx billeder der skifter onmouseover Rollover effekt onmouseout Rollover effekt onresize Replacering af elementerne i et vindue, hvis de er placeret i forhold til vinduets størrelse. onsubmit Kald af en valideringsrutine når der trykkes på submit en form Nogle eksempler fra W3Schools:
Event Object
Which mouse button was clicked?
What are the coordinates of the cursor?
What is the keycode of the key pressed?
What are the coordinates of the cursor, relative to the screen?
What are the coordinates of the cursor?
Was the shift key pressed?
Which element was clicked?
Which event type occurred?Using Events with Functions
1. Inline Events onclick="alert('welcome'); Eksempler: Lommeregner, hotelplaner , Random generator
2. The Traditional Model
function message(){ alert(”Welcome”); }
window.onload = message; // no parentheses after message!
3. The jQueryA link that calls a alert box.
$(document).ready(function() {
$("a").click(function() {
alert("Hello world!");
});
});
Introducing JavaScript Libraries
JQuery (www.jquery.com)
$(‘#message’).html('This is some new text'); // targeting the css selector for id="message"
var a = $("#tekstfelt").value; // i stedetfor document.getElementById("tekstfelt").value;
jQuiry selectors looks like CSS selectors
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><style type="text/css">
#blueBox {
position:absolute;
left:338px;
top:125px;
width:225px;
height:220px;
z-index:1;
background-color: #0099FF;
}#header {color:#0033FF ;}
.paragraf {background-color:#00CC33; border:dotted }
</style>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
function aabenBox(){
$("#blueBox").fadeIn();
}
function gemBox(){
$("#blueBox").hide();
}
function newHeadText(){
$("#header").html("Hello World ");
}</script>
<title>A web page</title>
</head><body>
<div id="blueBox">BLUE BOX</div>
<h1 id="header"> A Headline </h1><p class="paragraf"> Intro to use of Jquery </p>
<form>
<input type="button" onclick="newHeadText(); " value="New text in header" />
<input type="button" onclick="aabenBox(); " value="Show" />
<input type="button" onclick="gemBox();; " value="Hide" /></form>
</body>
</html>Examples of more jQuiry functions
Eksempler på anvendelse af JQuery
JQuery effekter på tekst og billeder i div tags
Reference til JQuery basic effekter
- Image Rollovers (7.1.html) p.238
- Photo Gallery (7.2.html) p.248
- Lightbox gallery (7.3.html) p.254
- Cycle slideshow (7.4.html) p.290
- Greybox2 (8.1.html)
- Drop down menu (8.3.html) p.304
- Form Validation (9.2.html) p.343
Navigation
- Links mulighed for at åbne indhold via target attribute ( _blank , _parent) , åbne i frame set og i iframe. ( Problemer med validering af target attribute !)
- window.Open( ) - (problemer med popup blokkere ) - se window_open_example.html i venstremenuen.
- Flot alternative Greybox window via JQuery. (p. 290 ) Greybox2 (8.1.html) vha. iframes, Jquery og css.
- Menuer
- Tilpasning af eksisterende standard menu ( menu )
- Spry menu i Dreamweaver
- Menu JS-biblioteker (ekstra muligheder for tilpasning )
Form og validering
Test af om brugerne indtaster den rigtige type data i en bestillingsformular.
Traditionel validering fra dag 4 øvelsen med if/else betingelser og alerts
Form's hvor brugeren ikke kan taste forkert. kan f.eks. også udbygges med en datovælger fra Jquery.
$("#commentForm").validate();Husk også at de enkelte input felter skal have rigtige id.
Form Validation (9.2.html) p.343
Expanding the Interface with Panels and Accordion
Accordion with Jesse James Garretts model
Panels with Jesse James Garretts model
Other Javascript Libraries
http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks
AJAX = Asynchronous JavaScript and XML
AJAX is not a new programming language, but a new technique for creating better, faster, and more interactive web applications.
With AJAX, a JavaScript can communicate directly with the server, with the XMLHttpRequest object (the Ajax engine). With this object, a JavaScript can trade data with a web server, without reloading the page.
AJAX uses asynchronous data transfer (HTTP requests) between the browser and the web server, allowing web pages to request small bits of information from the server instead of whole pages.
The AJAX technique makes Internet applications smaller, faster and more user-friendly.
The XMLHttpRequest object
By using the XMLHttpRequest object, a web developer can update a page with data from the server after the page has loaded!
AJAX was made popular in 2005 by Google (with Google Suggest).
Google Suggest is using the XMLHttpRequest object to create a very dynamic web interface: When you start typing in Google's search box, a JavaScript sends the letters off to a server and the server returns a list of suggestions.
The XMLHttpRequest object is supported in all major browsers (Internet Explorer, Firefox, Chrome, Opera, and Safari).
Your first AJAX application
Exercises:
Javascript
Ex. 2 String, Array øvelser.
a. Lav et JavaScript der finder ud af hvormange t'er der er i teksten 'There are times when you want to know how many chararcters are in a string.'
b. Hvad kan man bruge indexOf( ) metoden til. Lav et eksempel.
c. Lav en array som indeholder ugenavnene i en dansk uge . Lav en løkke som udskriver ugedagene i browseren.
EX.2_UI = User Interface
a. Lav en html form med et textarea hvor brugeren kan indtaste eller paste en tekst, og en button som kalder en funktion der beregner antal t'er i textarea'et.
Hint's:
document.getElementsById("tekstFelt").value,
<textarea name="tekst" cols="100" rows="10" id="tekstFelt">There are times when you want to know how many chararcters are in a string.</textarea>
b. Lav en html form som taget et tekst input og tester om teksten indeholder @.
JQuery
http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery
AJAX
Try out the Ajax examples on W3schools. Your first AJAX application
You could also try out Ajax together with JQuery