87

Click here to load reader

JavaScript Basics And DOM Manipulation

Embed Size (px)

DESCRIPTION

Day 1 of 7-days "JavaScript and Rich User Interfaces" training for my colleagues. It's a quintessence of JavaScript Basics.

Citation preview

Page 1: JavaScript Basics And DOM Manipulation
Page 2: JavaScript Basics And DOM Manipulation

JavaScript Basics And DOM Manipulation

Siarhei [email protected]

Page 3: JavaScript Basics And DOM Manipulation

Our roadmap

Page 4: JavaScript Basics And DOM Manipulation

Important tools to have“Mozilla Firefox is a free and open source web browser descended from the Mozilla Application Suite, managed by the Mozilla Corporation. Firefox had 19.73% of the recorded usage share of web browsers as of August 2008,

making it the second-most popular browser in current use worldwide.”

“Firebug integrates with Firefox to put a wealth of web development tools at your fingertips while you browse. You can edit, debug, and monitor CSS, HTML, and

JavaScript live in any web page.”

“The Aptana Studio Community Edition provides a full-featured web development environment. The Community Edition represents the core pieces of the Aptana frameworks for editing, debugging, synchronization, and project management.”

www.firefox.com

www.getfirebug.com

www.aptana.com

Page 5: JavaScript Basics And DOM Manipulation

JavaScript is more than form validation

www.go2web20.net

• A directory of web 2.0 applications and services • 2670 registered applications

Page 6: JavaScript Basics And DOM Manipulation

JavaScript Primitive Types

Page 7: JavaScript Basics And DOM Manipulation

• number• string• boolean• null• undefined

There are five primitive data types in JavaScript:

Everything that is not a primitive is an object.

JavaScript: Primitive types

Page 8: JavaScript Basics And DOM Manipulation

Numbers

Page 9: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Numbersvar n1 = 1;out(typeof n1); var n2 = 1.5;out(typeof n2);

var n3 = 0100;out(typeof n3);out (n3);

var n4 = 0xFF;out(typeof n4);out(n4);

>> "number"

>> "number"

>> "number">> 64

>> "number">> 255

Page 10: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Numbers

var n5 = 1e1;out(typeof n5);out(n5); var n6 = 2e+3;out(typeof n6);out(n6);

var n7 = 2e-3;out(typeof n7);out(n7);

>> "number">> 10

>> "number">> 2000

>> "number">> 0.002

Page 11: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Numbers

var n8 = Infinity;out(typeof n8);out(n8);

var n9 = 1e309;out(typeof n9);out(n9);

var n10 = 6/0;out(typeof n10);out(n10);

var n11 = -1*Infinity;out(typeof n11);out(n11);

>> "number">> Infinity

>> "number">> Infinity

>> "number">> Infinity

>> "number">> -Infinity

Page 12: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Numbers

var n12 = NaN;out(typeof n12);out(n12);

var n13 = 10 * "string";out(typeof n13);out(n13);

var n14 = 1 + 1 + NaN;out(typeof n14);out(n14);

>> "number">> NaN

>> "number">> NaN

>> "number">> NaN

{ }NaN - Not a Number.

Page 13: JavaScript Basics And DOM Manipulation

Strings

Page 14: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Strings

var s1 = "some string";out(typeof s1);

var s2 = 'a';out(typeof s2);

var s3 = "10";out(typeof s3);

>> "string"

>> "string"

>> "string"

{ }Any value placed between single or double quotes is considered a string.

Page 15: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Stringvar s41 = "one";var s42 = "two"var s43 = s41 + s42;out(s43); var s51 = "10";out(typeof s51);var s52 = s51 * 5;out(s52);out(typeof s52); var s6 = "1";out(typeof s6);out(++s6);out(typeof s6); var s7 = "some string 1";var s71 = s7 * 1;out(typeof s7);out(s71);out(typeof s71);

>> "onetwo"

>> "string"

>> 50>> "number"

>> "string">> 2>> "number"

>> "string">> NaN >> "number"

Page 16: JavaScript Basics And DOM Manipulation

Boolean

Page 17: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Boolean

var b1 = false;out(typeof b1);

var b2 = "some string";var b21 = !b2;var b22 = !!b2;out(typeof b2);out(b21);out(typeof b21);out(b22);out(typeof b22);

>> "boolean"

>> "string">> false>> "boolean">> true>> "boolean"

Page 18: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Boolean

var b31 = "";var b32 = null;var b33 = false;var b34 = NaN;var b35 = undefined;var b36 = 0;

if ( !b3* ) { //executes this section //... }}

All values become true when converted to a boolean, with the exception of the six falsy values:

Page 19: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Boolean

Some interesting comparison operations:

!= ==Non-equality comparison:

Returns true if the operands are not equal to each other.

Equality comparison: Returns true when both operands are equal. The operands are converted to the same type before being compared.

!==Non-equality comparison without type

conversion: Returns true if the operands are not equal OR they are different types.

===Equality and type comparison:

Returns true if both operands are equal and of the same type.

Page 20: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Boolean

Some interesting comparison operations:

var b4 = 2!="2";var b41 = 2=="2"; var b42 = 2!=="2";var b43 = 2==="2";

>> false>> true >> true>> false

Page 21: JavaScript Basics And DOM Manipulation

Null & Undefined

Page 22: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Null

var nl1 = null;out(typeof nl1);out(nl1);

var nl2 = 1 + null;out(nl2);

var nl3 = 1*null;out(nl3);

>> "object">> null

>> 1

>> 0

Page 23: JavaScript Basics And DOM Manipulation

JavaScript: Primitive types: Undefined

var u1 = {}; //try to access to nonexistent //field of the objectout(typeof u1.nonexistent);out(u1.nonexistent); var u2 = 1 + undefined; out(u2); var u3 = 1 * undefined;out(u3);

>> undefined>> undefined

>> NaN

>> NaN

Page 24: JavaScript Basics And DOM Manipulation

Arrays

Page 25: JavaScript Basics And DOM Manipulation

JavaScript: Arrays

var a = [1,2,3];out(typeof a);out(a);out(a[0]);out(a[5]); a[5] = "some string";out(a); delete a[2];out(a); delete a[5];out(a);

>> "object">> [1,2,3]>> 1>> undefined a[5] = "some string";>> [1,2,3, undefined, undefined,"some string"]

>> [1,2, undefined, undefined, undefined, "some string"] >> [1,2, undefined, undefined, undefined, undefined]

Page 26: JavaScript Basics And DOM Manipulation

JavaScript: Arrays

var a2 = [[1,2,3],["string1","string2",3]];out(a2[0]);out(a2[1]); var a3 = "one";out(typeof a3);out(a3[0]);out(typeof a3[0]);out(a3[1]);

>> [1,2,3]>> ["string1","string2",3]

>> "string" >> "o">> "string">> "n"

Page 27: JavaScript Basics And DOM Manipulation

Questions?

Page 28: JavaScript Basics And DOM Manipulation

Functions

Page 29: JavaScript Basics And DOM Manipulation

JavaScript: Functions

The power of functions. Where most programming languages have a special syntax for some object-oriented features, JavaScript just uses functions.

function sum(a,b) { return a + b;}

var r1 = sum(1,1); >> 2

Page 30: JavaScript Basics And DOM Manipulation

JavaScript: Functions: ParametersA function may not require any parameters, but if it does and you forget to pass them, JavaScript will assign the value undefined to the ones you skipped.

function sum(a,b) { return a + b;}

var r2 = sum(1);

function sum(a,b) { return a + b;}

var r3 = sum(1,2,3,4,5);

r2 >> NaN r3 >> 3

{ }1 + undefined = NaN

Page 31: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Parameters

function sumAll() { var result = 0; for(var i=0,length=arguments.length;i<length;i++){ result+=arguments[i]; } return result;}

var r4 = sum(1,2,3,4,5,6,7);

arguments is array of parameters which function accepts.

r4 >> 28

Page 32: JavaScript Basics And DOM Manipulation

JavaScript: Functions: ScopeVariables in JavaScript are not defined in a block scope, but in a function scope.

This means that • if a variable is defined inside a function, it's not visible outside of the function. • if a variable defined inside an if or a for code block is visible outside the code block.

function func() { var a = "local"; if(true) { out(a); var a2 = "local-if"; out(a2); } out(a); out(a2);}

>> "local"

>> "local-if"

>> "local">> "local-if"

Page 33: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Function literal notation

var func3 = function(a,b) { return a*b;

};

var f3 = func3;

Functions are like any other variable.

typeof func3 >> "function"typeof f3 >> "function" func3(2,2) >> 4 f3(3,3) >> 9

Page 34: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Built-in constructor

var func6 = new Function("a,b","return a+b;");func6(2,2) >> 4

}Do not use the Function() constructor. As with eval() and setTimeout(),always try to stay away from cases where you pass JavaScript code as a string. {

Page 35: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Anonymous Functions

(function(a,b) { out(a-b);})(5,3);

•You can pass an anonymous function as a parameter to another function. •You can define an anonymous function and execute it right away.

function execute(func) { out(func());}

execute(function() {return "hello, i'm anonymous function!";

});

>> "hello, i'm anonymous function!"

>> 2

Page 36: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Callback Functions

function info(){ return "this is info function.";}

function execute(func) { out(func());}

execute(function() { return "hello, i'm anonymous function!";});

execute(info);

anonymous callback function

callback function

Page 37: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Inner functions

function funcTop() {

var a = function() { out("innerFunction: do some work..."); }

out("funcTop: do some work..."); a(); }

define function

call function

•Keep the global namespace clean•Privacy

Page 38: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Scope

var r5 = "global";

function func1() { out(r5); var r5 = "local"; out(r5);}

func1();

var r5 = "global";

function func1() { out(r5);}

func1();

r5 >> undefinedr5 >> "local"

r5 >> "global"

Page 39: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Lexical scopeIn JavaScript, functions have lexical scope. This means that functions create their environment (scope) when they are defined, not when they are executed.

function func4() { var v = 1; return func5();};

function func5() { return v;

};

out(func4());

function func41() {var v = 1;

return (function() { return v;

})();};

out(func41());

>> ReferenceError: v is not defined >> 1

Page 40: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Lexical scope

Global

F

Nab

c

var a;//..function F() { var b; //.. function N() { var c; //.. }}

Page 41: JavaScript Basics And DOM Manipulation

JavaScript: Functions: Lexical scope

Global

F

N

ab

c

var a;var N;//..function F() { var b;

//..N = function () {

var c; //.. }}

Page 42: JavaScript Basics And DOM Manipulation

Questions?

Page 43: JavaScript Basics And DOM Manipulation

Objects

Page 44: JavaScript Basics And DOM Manipulation

JavaScript: Objects

var obj = { prop:1, prop2:"string", "unusual-prop":"value", 'WTF?$#!@$':{ a:"a-val" }, array: [1,2,3]};

JavaScript uses •arrays to represent indexed arrays •objects to represent associative arrays (hashes)

typeof obj >> objectobj.prop >> obj["unusual-prop"] >> "value" obj['WTF?$#!@$'].a >> "a-val"obj.array >> [1,2,3]obj["array"] >> [1,2,3]

Page 45: JavaScript Basics And DOM Manipulation

JavaScript: Objects : Defining a new property

var obj = { prop:1, prop2:"string", "unusual-prop":"value", 'WTF?$#!@$':{ a:"a-val" }, array: [1,2,3]};

obj.prop3 >> undefinedobj.prop3 = "value3";obj.prop3 >> "value3"

Page 46: JavaScript Basics And DOM Manipulation

JavaScript: Objects : PassingPassing objects by reference.

var obj1 = { a:"val-a"};

var obj2 = obj1; obj1.a >> "val-a"obj2.a >> "val-a" obj2.a = "val-a2"; obj1.a >> "val-a2"obj2.a >> "val-a2"

//..var obj3 = { a:"val-a"};

obj1===obj2 >> trueobj1===obj3 >> false

Page 47: JavaScript Basics And DOM Manipulation

JavaScript: Objects: Functions

var dog = { name: "Bobik", talk: function() { return "Woof, woof!"; }, sayName: function() { return this.name; }};

dog.name >> "Bobik" dog.talk() >> "Woof, woof!"dog.sayName() >> "Bobik"

Page 48: JavaScript Basics And DOM Manipulation

JavaScript: Objects: Constructor

function Cat(/*String*/ name) { this.name = name; this.talk = function() { return "I'm "+this.name+". Mrrr, miaow!"; }}

var cat = new Cat("Barsik");

typeof cat >> objectcat.name >> "Barsik"cat.talk() >> "I’m Barsik. Mrrr, miaow!"

Page 49: JavaScript Basics And DOM Manipulation

JavaScript: Objects: Constructor

function Cat(/*String*/ name) { this.name = name; this.talk = function() { //... }}

var cat2 = Cat("Barsik");

call without new

typeof cat2 >> undefinedcat2.name >> TypeError: cat2 has no properties

this refers to the global object window

window.name >> "Barsik"

Page 50: JavaScript Basics And DOM Manipulation

JavaScript: Objects: Constructor

var cat = new Cat("Barsik");

var constr = cat.constructor;var cat3 = cat.constructor("Murzik");

When an object is created, a special property is assigned to it behind the scenes — the constructor property.

constr >> function Cat(name) { .... }cat3.talk() >> "I’m Murzik. Mrrr, miaow!"

Page 51: JavaScript Basics And DOM Manipulation

JavaScript: Objects: call and applyTwo useful methods of the function objects are call() and apply().

They allow your objects to borrow methods from other objects and invoke them as their own.

var cat = new Cat("Barsik");//..var cat4 = {name:"Chernysh"};

cat.talk.call(cat4/**, param1, param2, ... **/) >> "I’m Chernysh. Mrrr, miaow!"cat.talk.apply(cat4/**, [param1, param2, ...] **/) >> "I’m Chernysh. Mrrr, miaow!"

Page 52: JavaScript Basics And DOM Manipulation

JavaScript: Objects: instanceofinstanceof operator tests if an object was created with specific constructor function.

var cat = new Cat("Barsik");var o = {};

cat instanceof Cat >> truecat instanceof Object >> true

o instanceof Object >> trueo instanceof Cat >> false

Page 53: JavaScript Basics And DOM Manipulation

Questions?

Page 54: JavaScript Basics And DOM Manipulation

Prototype

Page 55: JavaScript Basics And DOM Manipulation

JavaScript: Prototype: Intro

• not be confusing things, it’s not prototype.js library• JavaScript has prototype-based object model

Page 56: JavaScript Basics And DOM Manipulation

JavaScript: Prototype: prototype property

function Cat(/*String*/ name) {this.name = name;

this.talk = function() { return "I'm "+this.name+". Mrrr, miaow!"; }};

Cat.prototype >> {} (object) for(var i in Cat.prototype) { i+":"+Cat.prototype[i] >> ${propName}:${propValue}}

the way how enumerate all properties in an object

Page 57: JavaScript Basics And DOM Manipulation

JavaScript: Prototype: Adding properties

var cat = new Cat("Barsik");Cat.prototype.animal = "cat";

Cat.prototype >> {animal: "cat"}cat.animal >> "cat"

Cat.prototype.seeADog = function() { return "I'm "+this.name+". Sshhhhhhh!";} cat.seeADog() >> "I'm Barsik. Sshhhhhhh!";

Adding methods and properties to the prototype property of the constructor function is another way to add functionality to the objects this constructor produces.

Page 58: JavaScript Basics And DOM Manipulation

JavaScript: Prototype: Adding properties

var cat = new Cat("Barsik");Cat.prototype.animal = "cat";

Cat.prototype = { animal: "cat", seeADog : function() { return "I'm "+this.name+". Sshhhhhhh!"; }}

cat.animal >> "cat"cat.seeADog() >> "I'm Barsik. Sshhhhhhh!";

The same result as in the previous example ...

Overriding the prototype completely

Page 59: JavaScript Basics And DOM Manipulation

JavaScript: Prototype: Changing prototype

var cat = new Cat("Barsik");var cat2 = new Cat("Murzik");

Cat.prototype.animal = "cat";

cat.animal >> "cat"cat2.animal >> "cat"

Cat.prototype.animal = "dog";

cat.animal >> "dog"cat2.animal >> "dog"

Changing the prototype for all Cat instances

Page 60: JavaScript Basics And DOM Manipulation

JavaScript: Prototype: Own props vs. prototype ones

function Gadget(/*String*/ name) { this.name = name;}

var iphone = new Gadget("iPhone");

Gadget.prototype.name = "none";

iphone.name >> "iPhone"delete iphone.name;iphone.name >> "none"

Page 61: JavaScript Basics And DOM Manipulation

JavaScript: Prototype: Extending built-in objectsYeah, it’s possible...

String.prototype.getSecondLetter = function() { return this[1];} var str = "hello!";str.getSecondLetter() >> "e"

... but be careful.

Page 62: JavaScript Basics And DOM Manipulation

Inheritance

Page 63: JavaScript Basics And DOM Manipulation

JavaScript: Inheritance: Prototype Chaining Examplefunction Shape() { this.name = "Shape"; this.getName = function() { return this.name; }}; function TwoDShape() { this.name = "2DShape";}; function Triangle(/*Number*/ side, /*Number*/ height) { this.side = side; this.height = height; this.name = "Triangle"; this.getArea = function() { return this.side * this.height / 2; }}

Page 64: JavaScript Basics And DOM Manipulation

JavaScript: Inheritance: Prototype Chaining ExampleTwoDShape.prototype = new Shape();Triangle.prototype = new TwoDShape(); TwoDShape.prototype.constructor = TwoDShape;Triangle.prototype.constructor = Triangle;

var t = new Triangle(10,4);out(t.getArea());out(t.getName());

out(t.constructor);

out(t instanceof Triangle);out(t instanceof TwoDShape);out(t instanceof Shape);out(t instanceof String);

out(Triangle.prototype.isPrototypeOf(t));out(TwoDShape.prototype.isPrototypeOf(t));out(Shape.prototype.isPrototypeOf(t));out(String.prototype.isPrototypeOf(t));

var shape = new Shape();out(shape.getName());

>> 20>> Triangle

>> function Triangle(side,height){...}

>> true>> true>> true>> false

>> true>> true>> true>> false

>> Shape

Page 65: JavaScript Basics And DOM Manipulation

JavaScript: Inheritance: Shared Properties

function Obj() { this.text = "Hello this world!";};

Move shared properties to prototype.

function Obj() {};Obj.prototype.text = "Hello this world!";==

But how about memory usage?

Page 66: JavaScript Basics And DOM Manipulation

JavaScript: Inheritance: Some profiling results

Activity Monitorprototype propertythis. property

v. 3.0.1 Mac OS

Page 67: JavaScript Basics And DOM Manipulation

JavaScript: Inheritance: Inheriting the prototype only function Shape() {}Shape.prototype.name = "Shape";Shape.prototype.getName = function() { return this.name;}; function TwoDShape() {}TwoDShape.prototype = Shape.prototype;TwoDShape.prototype.constructor = TwoDShape;TwoDShape.prototype.name = "2DShape"; function Triangle(/*Number*/ side, /*Number*/ height) { this.side = side; this.height = height;}

Triangle.prototype = TwoDShape.prototype;Triangle.prototype.constructor = Triangle;

Triangle.prototype.name = "Triangle";Triangle.prototype.getArea = function() { return this.side * this.height / 2; }

Page 68: JavaScript Basics And DOM Manipulation

JavaScript: Inheritance: Inheriting the prototype only

var t = new Triangle(10,4);out(t.getArea());out(t.getName());

out(t.constructor);

out(t instanceof Triangle);out(t instanceof TwoDShape);out(t instanceof Shape);out(t instanceof String);

out(Triangle.prototype.isPrototypeOf(t));out(TwoDShape.prototype.isPrototypeOf(t));out(Shape.prototype.isPrototypeOf(t));out(String.prototype.isPrototypeOf(t));

var shape = new Shape();out(shape.getName());

>> 20>> Triangle

>> function Triangle(side,height){...}

>> true>> true>> true>> false

>> true>> true>> true>> false

>> Triangle

Page 69: JavaScript Basics And DOM Manipulation

Questions?

Page 70: JavaScript Basics And DOM Manipulation

Even more...

Page 71: JavaScript Basics And DOM Manipulation

JavaScript: General: Even more...

• Math - mathematical constants and functions.• Date - working with dates.• RegExp - regular expressions.

See more info on

www.developer.mozilla.org

Page 72: JavaScript Basics And DOM Manipulation

JavaScript: General: Exception handling

try { iDontExist();}catch(e){ //process error here

out(e);}finally { //do some work here}

>> ReferenceError: iDontExist is not defined

Page 73: JavaScript Basics And DOM Manipulation

JavaScript: General: Exception handling

• EvalError• RangeError• ReferenceError• SyntaxError• TypeError • URIError• Your own with new Error([message[, fileName[, lineNumber]]])

Page 74: JavaScript Basics And DOM Manipulation

Questions?

Page 75: JavaScript Basics And DOM Manipulation

Document Object Model

Page 76: JavaScript Basics And DOM Manipulation

DOM: Introduction

The Document Object Model is an API for HTML and XML documents. It provides a structural representation of the document, enabling you to modify its content and visual presentation. Essentially, it connects web pages to scripts or programming languages.

The Document Object Model, a language-neutral set of interfaces.

Page 77: JavaScript Basics And DOM Manipulation

DOM: Chair Construction Analogy

Model API

Page 78: JavaScript Basics And DOM Manipulation

DOM: HTML document<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd"><html> <head> <meta http-equiv="Content-Type"

content="text/html; charset=UTF-8" /> <title>ToDo list</title> </head> <body> <div>What I need to do.</div> <p title="ToDo list">My list:</p> <ul> <li>Finish presentation</li> <li>Clean up my home.</li> <li>Buy a bottle of milk.

(May be beer will be better?;)</li>

</ul> </body></html>

Page 79: JavaScript Basics And DOM Manipulation

DOM: Finding elements

<input type="text" id="message" value="Messages goes here..."/>

...

var msgInput = document.getElementById("message");

<ul id="list"> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li></ul>

...

var items = document.getElementsByTagName("li");

element or null

array of element or an empty array

Page 80: JavaScript Basics And DOM Manipulation

<p title="ToDo list">My tasks</p>

DOM: Elements

Node types:

an HTML element - 1an attribute - 2a text node - 3

Page 81: JavaScript Basics And DOM Manipulation

DOM: Element attributes

• nodeName• nodeValue• nodeType• parentNode• childNodes• firstChild• lastChild• previousSibling• nextSibling• attributes• ownerDocument

Page 82: JavaScript Basics And DOM Manipulation

DOM: Manipulating the DOM

var item = document.createElement("li");var text = document.createTextNode(message);item.appendChild(text);

parent.appendChild(item);

parent.insertBefore(someNode, item);

parent.innerHTML = parent.innerHTML + ("<li>"+message+"</li>");

parent.removeChild(item);

Page 83: JavaScript Basics And DOM Manipulation

DOM: Event Handlers

var addBtn = document.getElementById("addBtn");var list = document.getElementById("list");if(addBtn) { addBtn.onclick = function(event) {

console.log(event);var value = msgInput.value;

if(value) { createListEntry(list,value); } else { alert("Message is empty!"); } }}

Page 84: JavaScript Basics And DOM Manipulation

DOM: Events: Capturing and Bubbling

var addBtn = document.getElementById("addBtn");

//...

addBtn.addEventListener('click', function(){ //code goes here},false);

addBtn.attachEvent('click', function(){ //code goes here});

Page 85: JavaScript Basics And DOM Manipulation

DOM: Events: Capturing and Bubbling

Page 86: JavaScript Basics And DOM Manipulation

DOM: Let’s see an exampleToDos application

• adding tasks• deleting tasks• reordering tasks• no backend support

Very early alpha ;)

Page 87: JavaScript Basics And DOM Manipulation

Questions?