Lecture 12
Introduction to JavaScript
Reading: 7.1 - 7.4
Except where otherwise noted, the contents of this presentation are Copyright 2010 Marty Stepp and Jessica Miller.
7.1: Key JavaScript Concepts
-
7.1: Key JavaScript Concepts
-
7.2, 7.3, 7.4: JavaScript Syntax
Client-side scripting
(7.1.1)
- client-side script: code runs in browser after page is sent back from server
- often this code manipulates the page or responds to user actions
Why use client-side programming?
PHP already allows us to create dynamic web pages. Why also use client-side scripting?
-
client-side scripting (JavaScript) benefits:
- usability: can modify a page without having to post back to the server (faster UI)
- efficiency: can make small, quick changes to page without waiting for server
- event-driven: can respond to user actions like clicks and key presses
-
server-side programming (PHP) benefits:
- security: has access to server's private data; client can't see source code
- compatibility: not subject to browser compatibility issues
- power: can write files, open connections to servers, connect to databases, ...
What is JavaScript?
(7.1)
- a lightweight programming language ("scripting language")
- used to make web pages interactive
- insert dynamic text into HTML (ex: user name)
- react to events (ex: page load user click)
- get information about a user's computer (ex: browser type)
- perform calculations on user's computer (ex: form validation)
- a web standard (but not supported identically by all browsers)
- NOT related to Java other than by name and some syntactic similarities
JavaScript vs. Java
- interpreted, not compiled
- more relaxed syntax and rules
- fewer and "looser" data types
- variables don't need to be declared
- errors often silent (few exceptions)
- key construct is the function rather than the class
- "first-class" functions are used in many situations
- contained within a web page and integrates with its HTML/CSS content
JavaScript vs. PHP
- similarities:
- both are interpreted, not compiled
- both are relaxed about syntax, rules, and types
- both are case-sensitive
- both have built-in regular expressions for powerful text processing
- differences:
- JS is more object-oriented:
noun.verb()
, less procedural: verb(noun)
- JS focuses on UIs and interacting with a document; PHP on HTML output and files/forms
- JS code runs on the client's browser; PHP code runs on the web server
Linking to a JavaScript file:
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
- script code is stored in a separate
.js
file
- JS code can be placed directly in the HTML file's
body
or head
(like CSS)
- but this is bad style (should separate content, presentation, and behavior)
A JavaScript statement:
alert
alert("message");
alert("IE6 detected. Suck-mode enabled.");
- a JS command that pops up a dialog box with a message
Variables and types
(7.2.1, 7.2.3)
var name = expression;
var age = 32;
var weight = 127.4;
var clientName = "Connie Client";
- variables are declared with the
var
keyword (case sensitive)
- types are not specified, but JS does have types ("loosely typed")
Number
, Boolean
, String
, Array
, Object
, Function
, Null
, Undefined
- can find out a variable's type by calling
typeof
String
type
(7.2.7)
var s = "Connie Client";
var fName = s.substring(0, s.indexOf(" "));
var len = s.length;
var s2 = 'Melvin Merchant';
- methods:
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)
-
concatenation with
+
: 1
+ 1 is 2
, but
"1"
+ 1 is "11"
- JS programs have no
main
; they respond to user actions called events
- event-driven programming: writing programs driven by user events
the canonical clickable UI control (inline)
<button>Click me!</button>
- button's text appears inside tag; can also contain images
- To make a responsive button or other UI control:
- choose the control (e.g. button) and event (e.g. mouse click) of interest
- write a JavaScript function to run when the event occurs
- attach the function to the event on the control
JavaScript functions
function name() {
statement ;
statement ;
...
statement ;
}
function myFunction() {
alert("Hello!");
alert("How are you?");
}
- the above could be the contents of
example.js
linked to our HTML page
- statements placed into functions can be evaluated in response to user events
Event handlers
<element attributes onclick="function();">...
<button onclick="myFunction();">Click me!</button>
- JavaScript functions can be set as event handlers
- when you interact with the element, the function will execute
onclick
is just one of many event HTML attributes we'll use
-
but popping up an
alert
window is disruptive and annoying
-
A better user experience would be to have the message appear on the page...
Document Object Model
(DOM)
(7.1.4)
a set of JavaScript objects that represent each element on the page
- most JS code manipulates elements on an HTML page
- we can examine elements' state
- e.g. see whether a box is checked
- we can change state
- e.g. insert some new text into a
div
- we can change styles
- e.g. make a paragraph red
DOM element objects
(7.2.5)
-
every element on the page has a corresponding DOM object
-
access/modify the attributes of the DOM object with
objectName.attributeName
Accessing elements: document.getElementById
var name = document.getElementById("id");
<button onclick="changeText();">Click me!</button>
<input id="output" type="text" value="replace me" />
function changeText() {
var textbox = document.getElementById("output");
textbox.value = "Hello, world!";
}
-
document.getElementById
returns the DOM object for an element with a given id
-
can change the text in most form controls by setting the
value
property
More advanced example
<button onclick="swapText();">Click me!</button>
<span id="output2">Hello</span>
<input id="textbox2" type="text" value="Goodbye" />
function swapText() {
var span = document.getElementById("output2");
var textBox = document.getElementById("textbox2");
var temp = span.innerHTML;
span.innerHTML = textBox.value;
textBox.value = temp;
}
-
can change the text inside most elements by setting the
innerHTML
property