Except where otherwise noted, the contents of this document are Copyright 2012 Marty Stepp, Jessica Miller, and Victoria Kirst. All rights reserved. Any redistribution, reproduction, transmission, or storage of part or all of the contents in any form is prohibited without the author's expressed written permission.
PHP already allows us to create dynamic web pages. Why also use client-side scripting?
noun.verb()
, less procedural: verb(noun)
script
<script src="filename" type="text/javascript"></script>
<script src="example.js" type="text/javascript"></script>
script
tag should be placed in HTML page's head
.js
filebody
or head
(like CSS)
alert
alert("message");
alert("IE6 detected. Suck-mode enabled.");
var name = expression;
var age = 32; var weight = 127.4; var clientName = "Connie Client";
var
keyword (case sensitive)Number
, Boolean
, String
, Array
, Object
, Function
, Null
, Undefined
typeof
Number
type
var enrollment = 99; var medianGrade = 2.8; var credits = 5 + 4 + (2 * 3);
int
vs. double
)+ - * / % ++ -- = += -= *= /= %=
"2" * 3
is 6
String
type
var s = "Connie Client"; var fName = s.substring(0, s.indexOf(" ")); // "Connie" var len = s.length; // 13 var s2 = 'Melvin Merchant'; // can use "" or ' '
charAt
,
charCodeAt
,
fromCharCode
,
indexOf
,
lastIndexOf
,
replace
,
split
,
substring
,
toLowerCase
,
toUpperCase
charAt
returns a one-letter String
(there is no char
type)length
property (not a method as in Java)+
: 1
+ 1 is 2
, but
"1"
+ 1 is "11"
String
\' \" \& \n \t \\
String
s:
var count = 10; var s1 = "" + count; // "10" var s2 = count + " bananas, ah ah ah!"; // "10 bananas, ah ah ah!" var s3 = 'I watched the film "Logan\'s Run".'; var n1 = parseInt("42 is the answer"); // 42 var n2 = parseFloat("booyah"); // NaN
String
, use [index] or charAt
:
var firstLetter = s[0]; var firstLetter = s.charAt(0); var lastLetter = s.charAt(s.length - 1);
// single-line comment
/* multi-line comment */
<!-- comment -->
/* comment */
// comment
# comment
for
loop
(same as Java)
for (initialization; condition; update) { statements; }
var sum = 0; for (var i = 0; i < 100; i++) { sum = sum + i; }
var s1 = "hello";
var s2 = "";
for (var i = 0; i < s.length; i++) {
s2 += s1[i] + s1[i];
}
// s2 stores "hheelllloo"
var rand1to10 = Math.floor(Math.random() * 10 + 1); var three = Math.floor(Math.PI);
> < >= <=
&& || !
== != === !==
true
:
5 < "7"
42 == 42.0
"5.0" == 5
===
and !==
are strict equality tests; checks both type and value:
"5.0" === 5
is false
if/else
statement
(same as Java)
if (condition) { statements; } else if (condition) { statements; } else { statements; }
if/else
statementvar iLikeJS = true; var ieIsGood = "IE6" > 0; // false if ("web dev is great") { /* true */ } if (0) { /* false */ }
Boolean
0
, 0.0
, NaN
, ""
, null
, and undefined
Boolean
explicitly:
var boolValue = Boolean(otherValue);
var boolValue = !!(otherValue);
while
loops
(same as Java)
while (condition) { statements; }
do { statements; } while (condition);
break
and continue
keywords also behave as in Javafunction name() { statement ; statement ; ... statement ; }
function myFunction() {
alert("Hello!");
alert("How are you?");
}
myFunction(); // alerts "Hello" then "How are you?"
example.js
linked to our HTML pagemain
; they respond to user actions called events<element attributes onclick="function();">...
<div onclick="myFunction();">Click me!</div>
onclick
is just one of many event HTML attributes we'll use<button>
the canonical clickable UI control (inline)
<button onclick="myFunction();">Click me!</button>
a set of JavaScript objects that represent each element on the page
div
objectName.attributeName
img
tag's src
propertya
tag's href
propertydocument.getElementById
var name = document.getElementById("id");
<img id="icon01" src="images/octopus.jpg" alt="an animal" /> <button onclick="changeImage();">Click me!</button>
function changeImage() { var octopusImage = document.getElementById("icon01"); octopusImage.src = "images/kitty.gif"; }
document.getElementById
returns the DOM object for an element with a given id
<div id="main" class="foo bar"> <p>See our <a href="sale.html" id="saleslink">Sales</a> today!</p> <img id="icon" src="images/borat.jpg" alt="Borat" /> </div>
var mainDiv = document.getElementById("main"); var icon = document.getElementById("icon"); var theLink = document.getElementById("saleslink");
Property | Description | Example |
---|---|---|
tagName
|
element's HTML tag |
mainDiv.tagName is "DIV"
|
className
|
CSS classes of element |
mainDiv.className is "foo bar"
|
innerHTML
|
content in element |
mainDiv.innerHTML is "\n <p>See our <a hr...
|
src
|
URL target of an image |
icon.src is "images/borat.jpg"
|
href | URL target of a link |
theLink.href is "sale.html"
|
<input id="sid" type="text" size="7" maxlength="7" /> <input id="frosh" type="checkbox" checked="checked" /> Freshman?
var sid = document.getElementById("sid"); var frosh = document.getElementById("frosh");
Property | Description | Example |
---|---|---|
value
|
the text/value chosen by the user |
sid.value could be "1234567"
|
checked
|
whether a box is checked |
frosh.checked is true
|
disabled
|
whether a control is disabled (boolean) |
frosh.disabled is false
|
readOnly
|
whether a text box is read-only |
sid.readOnly is false
|
<select id="captain"> <option value="kirk">James T. Kirk</option> <option value="picard">Jean-Luc Picard</option> <option value="cisco">Benjamin Cisco</option> </select> <label> <input id="trekkie" type="checkbox" /> I'm a Trekkie </label>
select
, you usually want its value
checked
(true/false)<button onclick="addText();">Click me!</button> <span id="output">Hello </span>
function addText() { var span = document.getElementById("output"); span.innerHTML += " bro"; }
innerHTML
property
innerHTML
// bad style!
var paragraph = document.getElementById("welcome");
paragraph.innerHTML = "<p>text and <a href=\"page.html\">link</a>";
innerHTML
can inject arbitrary HTML content into the pageinnerHTML
to inject HTML tags; inject plain text only
objectName.style.propertyName = "value";
<button onclick="colorIt();">Click me!</button> <span id="fancytext">Don't forget your homework!</span>
function colorIt() { var text = document.getElementById("fancytext"); text.style.color = "#ff5500"; text.style.fontSize = "40pt"; }
Property | Description |
---|---|
style
|
lets you set any CSS style property for an element |
backgroundColor
, borderLeftWidth
, fontFamily
float
→ cssFloat
(can you guess why?).style
when setting styles
var clickMe = document.getElementById("clickme");clickMe.color = "red";clickMe.style.color = "red";
likeThis
, not like-this
clickMe.style.font-size = "14pt";clickMe.style.fontSize = "14pt";
clickMe.style.width = 200;clickMe.style.width = "200px"; clickMe.style.padding = "0.5em";