Title: JavaScript
1JavaScript
2Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Stuff...
3What is JavaScript all about?
- Small program
- Runs in the client browser
- Typical uses
- Perform simple calculations on existing Web page
data - Perform error checking on user inputs in HTML
form elements - Manipulate data that the developer embeds in the
HTML document - Create and read cookies
- Control the appearance of the current Web
4How a Script Works
- Scripts are interpreted
- Source code translated to machine language one
line at a time each time script is run - Actually it's more complicated than that
browsers today have hybrid JavaScript
implementations that compile some of the code and
where required interpret some of it. - Can write with any text editor
- But it's a "lot" easier if the editor provides
color coding and code completion support!
5JavaScript and Object Oriented Programming
- JavaScript supports OO programming including
inheritance - We aren't going to cover this
- It also supports try/catch error handling
- But with code to detect user entry errors this
shouldn't be needed - You can learn more about JavaScript OO from the
following two links (not required for this class)
http//www.javascriptkit.com/javatutors/oopjs.shtm
l
http//www.crockford.com/javascript/inheritance.ht
ml
6Adding Javascript to a Web Page
- Add the script tag anywhere in the Web page body
- Place the tag where you want the script to
execute - Add the script commands within the script tags
- ltscript language"JavaScript" type"text/javascri
pt"gt - first script command
- second script command
-
- lt/scriptgt
- Shortening the initial script tag to this is
acceptable and recommended - ltscriptgt
Browsers default to language"JavaScript"
typetext/javascript if you omit these attributes
http//www.javascriptkit.com/javatutors/languageat
tri.shtml
7Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Stuff...
8When does the script execute?
- If commands are not contained within a function,
they execute in sequence as the page is loaded
into the browser - If contained within a function the commands do
not execute until explicitly called by clicking a
button (or other event)
9Where can you place a script?
- This is okay where it is normally placed if
written in the html file (most other locations
also work) - lthtmlgt
- ltheadgt
- ltscriptgt
- alert("Hello")
- lt/scriptgt
- lttitlegtHello Page Titlelt/titlegt
- lt/headgt
- Dont do this (you can come up with other places
it won't work) - lthtmlgtltheadgt
- lttitlegtHello Page Title
- ltscriptgt
- alert("Hello")
- lt/scriptgt
- lt/titlegt
10What will the alert display when this script runs?
- A The alert will display
- Last name is Smith
- B The alert will display
- Last name is
- C The alert won't be displayed
- D No idea
11Affects of script location
- Cant access a page object until it has loaded.
For example this wont work - ltscriptgt
- alert("The default employee last name is "
- document.frmEmployee.txtLastname.value)
- lt/scriptgt
- ltform name"frmEmployee"gt
- lt!-- initialize the last name to Smith --gt
- ltinput name"txtLastname" value"Smith"gt
- lt/formgt
- But this will work
- ltform name"frmEmployee"gt
- lt!-- initialize the last name to Smith --gt
- ltinput name"txtLastname" value"Smith"gt
- lt/formgt
- ltscriptgt
- alert("The default employee last name is "
- document.frmEmployee.txtLastname.value)
- lt/scriptgt
12Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Stuff...
13JavaScript Data Types
- JavaScript is a loosely-typed language
- You don't declare the data type when you declare
the variable - The variable assumes the "correct" data type when
you assign a value to it - The language "usually" converts a variable value
to the correct data type when you perform
operations on it
14Data Types
- JavaScript types
- Boolean (true, false)
- Number (10, -3.31)
- Object (document.frmForm1.txtInput)
- String ("Now is the time")
- Date (12/4/2009)
- Data Types? The previous slide said it is
"loosely typed"
15Data Types
- JavaScript variables assume the data type of
whatever is assigned to them - var name "Hello"
- name is a string
- var whatever 12
- whatever is a number
- var whatever "Something"
- whatever is a string
16Using var to declare variables
- Don't have to use var
- But if you don't you can get some unexpected
behavior I'll show this in class
Use var to get the usual (like Java) scoping of
variables!
17Using var to declare variables
Try catch another possibility (but the upper
solution is better)
18What happens now when the user assigns a name and
then tries to display it?
19JavaScript Objects
- Variables (and constants) are also Objects
- Objects can do more than store a value
- Examples of object operations
- String
- determine length of string
- convert to upper/lowercase letters
- Number
- convert to fixed number of places after the
decimal point - Date
- finding the current date/time from the system
clock
20Example of String Object Properties Methods
Property or Method Description Example Result
length Returns the length of a text string var myString new String() myString "Joline" var strLength myString.length 6
toLowerCase Converts a string to lowercase letters var myString new String() myString "Joline" var strLowerCase myString.toLowerCase() "joline"
toUpperCase Converts a string to uppercase letters var myString new String() myString "Joline" var strUpperCase myString.toUpperCase() "JOLINE"
21Example of Number Object Properties Methods
Property or Method Description Example Result
toFixed Rounds a number to a specified number of decimal places var myNumber 3.14157 var myRoundedNumber myNumber.toFixed(3) 3.142
22Example of Date Object Properties Methods
Property or Method Description Example
getFullYear() Returns the current four-digit year var myDate new Date() var CurrentYear myDate.getFullYear()
getMonth() Returns the current month, as a number from 0-11 var myDate new Date() var CurrentMonth myDate.getMonth()
getDate() Returns the current day of the month, from 1-31 var myDate new Date() var CurrentDate myDate.getDate()
getHours(), getMinutes(), getSeconds() Returns the current hour (0-23), minute (0-59), or second (0-59) var myDate new Date() var CurrentHour myDate.getHours()
23Warning
- Declaring a variable using new won't prevent the
variable from automatically converting to any
data type assigned to it!
24Displaying the Current Date
- lthtmlgtltheadgtlttitlegtMethodslt/titlegtlt/headgt
- ltbodygt
- ltscriptgt
- var today new Date()
- var weekFromToday new Date(today.getFullYear
(), -
today.getMonth(), - today.getDate()
7) - alert("Today's date is " today "\n"
- "A week from today is "
weekFromToday) - lt/scriptgt
- lt/bodygtlt/htmlgt
Date objects have tobe created using new
Tip you can get code help for Date in
Dreamweaver by entering Date( and
looking at the help popuped up above it.
If not shown try pressing ctrl-spacebar to
display it Notice it has 4 constructors
25Displaying the Current Date in short format
Use today.getMonth today.getDate, and
today.getFullYear Example - replace
today in the previous slide's alert with
(today.getMonth() 1) "/" today.getDate()
"/" today.getFullYear() Add similar code
using weekFromTodayWhy is today.getMonth() 1
inside parentheses? Try removing them and see
what happens. Why am I adding 1 to
today.getMonth()?
26Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Stuff...
27Data Type Conversions
- All HTML form input values are text strings
- What if you need to change a value to a number?
- Motivations
- Determine if an input number value is within a
specific range - Perform an addition operation on a form input
28JavaScript Conversion Functions
- Converting a string to a number
- parseInt() converts a string to a number, and
removes any fractional values - parseFloat() converts a string to a number, and
includes any fractional values - Examples
document.frmForm1.txtResult.value
parseInt(value1) parseInt(value2) document.fr
mForm1.txtResult.value parseFloat(value1)
parseFloat(value2)
29Code help for parseInt and parseFloat
- In Dreamweaver Code view within script element
- press Ctrl Spacebar at the same time
- Type the letters you 'think' the command begins
with (and/or scroll up and down to view options)
30Converting Numbers to Strings
- Concatenate number to an empty string
- Example
- myNumber is now a String
var myNumber 13 myNumber myNumber ""
31Concatenating Number Values and String Values
- is an overloaded operator in JavaScript
- used for both addition and concatenation
- What if you combine strings and numbers in the
same operation? - add 2 numbers result is a number
- add a string to a number result is a string
- add a number to a string result is a string
- If an operand on either side of the is a
string, the result is a string
32Given the following variable declarations, what
is displayed by each JavaScript alert? var
input1 "15" var input2 10.4 var input3
5 alert(input1 input2 input3)
______________________ alert(input3 input2
input1) ______________________ alert(input1
(input2 input3))______________________alert(in
put1 input3) ______________________
33Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Stuff...
34HTML Forms
- Enhanced HTML documents that allow users to enter
inputs onto Web pages using common interface
controls - Text inputs, radio buttons, command buttons, etc.
- When the user submits the Web page, the form
passes the input values to the Web server - Input values are called parameters
- Values are passed to the server in a parameter
list
35Creating a Form
- form tag attributes
- name identifies the form internally within the
Web page - Example name"customer"
- Form ID newer syntax for identifying a form.
If used, the name attribute and id should be the
same - Example id"customer" name"customer"
- action specifies the action the Web server
performs with the form parameter list - Usually involves calling a script or program that
runs on the Web server (not in the users browser
like JavaScript) - method how the Web server processes the
parameters - GET passes the parameters as a list on the URL
- POST sends the parameters directly to the
receiving program
36Confusion between id and name attributes
- The id attribute (for example id"one") can be
added to any HTML element.lttable id"data"gt
including form and input tags - An element identified by a tag can be referenced
in JavaScript using the document.getElementById
methoddocument.getElementByID("data") - This can allow modifying just about any aspect of
a page's appearance using JavaScript - In addition, if a style sheet is linked to the
page, id's can apply id styles to an element - Form tags and form element tags (input, select
and textarea) allow using the name attribute. - Names identify inputs to be sent to a Web server
and can be used to access form input values using
JavaScript. For example JavaScript accessing an
input value might be document.formName.inputNam
e.value And a server jsp program reading the
inputName value would use request.getParameter("
inputName") - The name attribute must be used for user form
inputs with values that are to be sent to a web
server - If omitted, the value the users selects or enters
for the input will NOT be sent to the server.
37Accessing form elements
- Array Notationdocument.formsindex.elementsind
ex.propertyOrMethodName - Must know the index number (order in which the
form and element appear in the page) - Be warned that if you place any of the inputs in
a different order or omit one and use array
notation the array indexes will be off and the
code will not work! - Which is why I use names instead of array
indexes. - names (a good choice with javascript)document.fo
rmName.elementName.propertyOrMethodNameordocumen
t.formsindex.elementName.propertyOrMethodName - Names are easier to read and understand than
array notation - Except when validating radio inputs (more later)
- idsdocument.getElementByID("fname").value
38Example Form Tag
- ltform name"customer_order"
- method"post" action"ProcessOrder.jsp"gt
- form input elements and text go here
- lt/formgt
39Form Elements
- Most form elements are defined using the input
tag - ltinput type"input_type"
- name"input_name"
- value"input_value"gt
- Type text, button, radio, etc.
- Name used to reference the element internally
- Value the elements initial or current value
40HTML Form Elements
Description Function Type Sample Tag
Text field Entering a single line of text text ltinput type"text" name"name"gt
Password field Entering a single line of text with values masked as "" Password ltinput type"password" name"userpwd"gt
Command button Starting an action such as executing a script or program Button ltinput type"button" value"Whatever"gt
Submit command button Submitting a form to the Web server Submit ltinput type"submit" value"Login"gt
Reset command button Returning the form to its original state (clearing/resetting input values) Reset ltinput type"reset" value"Reset"gt
Radio button (or option button) Selecting a single value from a predefined group of item values Radio ltinput type"radio" name"pmtmethod"gt
Check box Specifying whether a value is true or false Checkbox ltinput type"checkbox" name"paid"gt
Lab1 introduces the HTML5 required attribute and
typeemail, number and date
41 More HTML Form Elements
Description Function Type Attribute Sample Tag
Text area Entering multiple lines of text, such as a paragraph Not used lttextarea name"comments"gt Initially displayed textlt/textareagt
Selection list Selecting a single item from a predefined list of items Not used ltselect name"colors"gt ltoption value"1"gtRedlt/optiongt lt/selectgt
Hidden element Storing a data item that is not visible to the user Hidden ltinput type"hidden" name"datemodified" value"stored data"gt
42Text Fields
- Single line of text data
- Types
- Text
- Password
- All HTML form data is entered as text
- Characters, dates, numbers they are all text
43Text Field Example
- ltpgtPlease enter your name
- ltinput name"UserName" type"text"gt
- lt/pgt
44Buttons
- Types
- Submit
- Reset
- Button
- Difference between Submit and Button?
- Submit automatically submits to the Web server
- Button requires the programmer to write
JavaScript code to make something happen
45Button Examples
- ltform name"username" action"nextPage.php"gt
- Please enter your name ltinput type"text"
name"name"gtltbrgt - ltinput type"submit" value"Submit Name"gtltbrgt
- ltinput type"reset" value"Clear Form"gtltbrgt
- ltinput type"button" value"Run Script"
onclick"javaScriptFunction()"gt - lt/formgt
46Radio Buttons
- Each individual button is part of a radio button
group - The name is the same for all buttons in the group
- It references the value of the currently-selected
button - The value and label attributes are different for
each button
47Radio Button Code Example
48Check Boxes
- Indicates a data value that can have one of two
values - General syntax
- The checked attribute makes the box checked at
form startup - ltinput type"checkbox" name"boxName"
value"boxValue" checkedgt
49Check Box Example
- ltpgtPaid in Full
- ltinput name"paidStatus"
- type"checkbox"
- value"PAID"
- checkedgt
- lt/pgt
50Selection Lists
- Defines a list from which the user can select one
of a series of values - Often used to display data retrieved from a
database - List value is the value of the selected list item
51Selection List Example
- ltselect name"products"gt
- ltoption value"shorts"gtShortslt/optiongt
- ltoption value"tents"gtTentslt/optiongt
- ltoption value"fleece"gtWomen's Fleecelt/optiongt
- ltoption value"sandals"gtChildren's
Sandalslt/optiongt - lt/selectgt
52Text Area
- Input field that can contain multiple lines of
unformatted text - You can specify the length and width
- Unlimited number of characters can be entered
- Sort of - this is browser dependent
- if you want to allow uploading entire books
consider using the HTML input type"file"
53Text Area Example
- lttextarea name"instructions" cols"40"
rows"10"gt Initial Textlt/textareagt
- Closing tag is required ( /gt not allowed for the
opening tag)
54Hidden Form Elements
- Useful for storing information that you dont
want the user to see - Example passing values from one form to another
- Syntax
- ltinput type"hidden" name"userName"
- value"MORRISCM"gt
55ltform name"example" action"process.jsp"
method"post"gt ltinput type"text"
name"quantity"gt ltinput type"text"
name"productID"gt ltinput type"submit"
value"Submit Order"gtlt/formgt
- When this form is submitted
- A) parameters are passed as a list on the URL
- B) parameters are passed directly to the web
server - C) What parameters? There are no parameters
56ltselect name"products"gt ltoption
value"shorts"gtShortslt/optiongt ltoption
value"tents"gtTentslt/optiongt ltoption
value"fleece"gtWomen's Fleecelt/optiongt ltoption
value"sandals"gtChildren's Sandalslt/optiongtlt/sele
ctgt
- When this page is shown
- A) This is displayed
- B) This is displayed
57- When the above page is shown it is possible to
select more than one at the same time. But
when using radio buttons only "one" should be
selectable at a time. Why can more than one be
selected? - A) The value's should all have the same value
(i.e., valueitems for example) - B) The name's should all be the same (i.e.,
nameitems) - C) The input type should be typeoption for all
of them - D) None of them have a closing lt/inputgt tag
58Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Stuff...
59Browser Object Model (BOM)
- Hierarchy of objects providing programmatic
access to the pages displayed in the browser - Not standardized among different browsers
- In practice most browsers have common
implementations of browser objects - Document Object Model (DOM)
- Subset of the browser object model
- This IS standardized and compatible (mostly)
across different browsers - Many developers, books, articles, etc. refer to
the DOM and don't refer to the BOM.
60Browser Object Hierarchy (basics)
window
document
history
location
navigator
screen
forms array
images array
links array
frames array
elements array
Document Object Model (DOM)
61HTML Document Object Hierarchy
window
document
form
text
submit
textarea
reset
password
checkbox
select
radio
button
option
62Navigating the HTML Document Model
- Hierarchy to a form object is called its object
path - Reference a form object using dot syntax
window.document.form_name.object_name
Enter the desired form name and object name (if
a form is named, it is usually referenced by
name rather than using forms0 same for
elements contained within a form)
Current window (always)
Current HTML document (always)
window.document.forms0.elements0
63Example
Form name student
You would reference the current value of DOB
as window.document.student.DOB.value NOTE
You can omit window when referencing a form
object For example document.student.DOB.value Som
e browsers also allow omitting document
Text field name DOB
64Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Cookies
65Creating a Custom Function
- Create the function declaration within script
tags - Defines the function
- Function name
- Parameter list (optional)
- Commands that function executes
- Value that the function returns (optional)
- Create the function call(s) in the Web page body
- Calls the function
- Passes parameter values to it (if function has
them)
66Creating a Custom Function
Function definition
Function calls in body
67Function Declaration Syntax
function function_name (parameter1, parameter2,
) function_commands return
return_value
Optional only a parameter name is used no
type information
68Function Call Syntax
function_name (parameter1, parameter2)
function validateAge(age) if(age "")
alert("Please enter your age") return
false else if(isNaN(age) true)
alert("Please enter a number for your
age") return false return
true function validateUserEntries()
if(validateAge(document.employee.age.value)
false) return false // additional code
checking other entries
Whatever the user has entered in the text input
is sent to validateAge as a parameter
69Event Handlers
- Event handler function that executes as a
result of a user action - You can use a JavaScript function as an event
handler for a form button - Names of commonly-used event handlers
- onsubmit (for form submit buttons)
- onclick (for regular command buttons, radio
buttons, check boxes, hyperlinks) - onselect (for text fields and text areas)
- onchange (for text fields, text areas, selection
lists) - onmouseover (for many html elements)
- Place the event handler name and its associated
action directly within the form item tag as an
attributevalue - The action is usually a JavaScript function call
ltinput typebutton event_handler_name"JavaScriptF
unctionCall()"gt
70Anonymous Functions
- Some of the stranger looking code in JavaScript
revolves around anonymous functions - If used as below not very strange and pretty much
interchangeable with non-anonymous functions
71Anonymous Functions
- This anonymous (sort of it is assigned to
sayHello) function works - This doesn't work
- Yet this non-anonymous function works
anonymous and non-anonymous functions aren't
quite the same
72Number of other anonymous issues
- But I'm not going to cover them here
- We'll return to this when discussing jQuery
73Examples of Event Handlers
ltinput type"text" name"inputName"
value"Joline" onchange"SelectNameText()
"gt
ltinput type"button" name"showGreeting"
value"Show Greeting" onclick"ShowGreetin
gText()"gt
ltimg namecarImage srccar.jpg
onmouseover"switchImage()"gt
74Finding Errors (continued)
- Sources of errors
- Error in the command calling the function
- Misspelled the function name?
- Wrong capitalization?
- Forgot the parentheses () after the function
name? - Error in the function code itself
- Mismatched curly braces ?
- Missing double or single quotes?
- Wrong spelling or capitalization of commands?
- ??
75What will happen when the button is clicked?
- Assume browser is set to display errors
- A) There must be an error somewhere or you
wouldn't be asking this so an error is
displayed - B) Hello is displayed
- C) No error, yet Hello isn't displayed
- D) No idea what happens
76Answer to previous question
- C onclick"displayMessage" should be this
onclick"displayMessage()" - Omitting the parentheses after displayMessage
doesn't make the browser show an error yet
displayMessage won't be called!
77What will happen when the button is clicked?
- Assume browser is set to display errors
- A) An error is displayed
- B) Hello is displayed
- C) No error, yet Hello isn't displayed
- D) No idea what happens
78Answer to previous question
- A function displayMessage should be
function displayMessage() - Omitting the parentheses after displayMessage in
the function declaration does cause a JavaScript
error
79What will happen when the button is clicked?
- Assume browser is set to display errors
- A) An error is displayed
- B) Hello is displayed
- C) No error, yet Hello isn't displayed
- D) No idea what happens
80Answer to previous question
- A onclick"displaymessage()" should be
onclick"displayMessage()"
81Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Stuff...
82Topic
- Validating HTML form inputs
- determining
- If users entered something for required values
- If users entered correct values
- Why do this using client-side scripts?
- Saves time/traffic of sending incorrect/incomplete
inputs to the Web server - Saves the Web server the processing time needed
to validate the inputs? Perhaps not you should
also validate on the server because users can
find ways to submit stuff to the server bypassing
JavaScript validation (can you think of one
really easy way to do this?)
83Form Validation Function
- Function that is called before a form is
submitted to the Web server for processing - Contains a series of if or if/else tests to
determine if form inputs are correct - If all inputs are correct, function returns a
value of true, and submits the form to the Web
server - If an input is not correct
- function displays an alert to inform the user
about the problem - sets the focus (or selects highlights contents)
to the input needing attention - returns a value of false, and does not submit the
form to the Web server
84Form Validation Function using if Structures
function validation_function_name if
(error_condition_1) alert ("error_condition_1_d
escription") set_focus_to_input_with_error ret
urn false if (error_condition_2) alert
("error_condition_2_description")
set_focus_to_input_with_error return false
if (error_condition_3) alert
("error_condition_3_description") set_focus_to_i
nput_with_error return false return
true
85Form Validation Function using if/else if
Structures
function validation_function_name var ret
false if (error_condition_1) alert
("error_condition_1_description") set_focus_to_i
nput_with_error else if (error_condition_2)
alert ("error_condition_2_description")
set_focus_to_input_with_error else if
(error_condition_3) alert ("error_condition_3_d
escription") set_focus_to_input_with_error
else ret true return ret
Is this better than using the previous slide's
approach?
86- Strategy for validating values
- Steps
- First check to see if required field value is
entered - Next check to see if value is of the correct data
type (if needed) - Finally check for value falling within a specific
range (if needed) - Repeat these steps for all other user inputs on
the page - Work from the top to bottom, left to right as
people normally read a page when doing this
validation and do all validations for each
element as you work from the top to the bottom. - When an error is found, notify the user of the
error and dont do further validation until the
user corrects this error and resubmits the form.
87Calling a Form Validation Function
- Create an onsubmit event handler for the form
- Syntax
- Result
- If the function returns the value true, the
submit input submits the form to the Web server - If the function returns the value false, the
submit input does not submit the form - Caution
- If you omit the return before the function name
the form will always be submitted even when
false is returned by the function
ltform name"frmExample" action"nextPage.htm"
onsubmit"return Validation_Function_Name()"gt
88Calling a Form Validation Function (alternate)
- Create an onclick event handler for the submit
button - Syntax
- Works almost the same as calling from a form's
onsubmit - Except IE allows a form to be submitted by
pressing the Enter key when an ltinput gt tag is
currently selected. If this is done, it bypasses
the submit button and the validation function
isn't called. - Firefox and other browsers don't bypass
validation if a submit input's onclick is used. - Use the previous slide's form onsubmit approach
and do not use a submit button's onclick event.
ltinput type"submit" value"Submit"
onclick"return Validation_Function_Name()"gt
89Validating using onblur
- onblur event that occurs when the focus shifts
away from the currently selected element - Allows validating an entry the moment the user
tabs or clicks to the next form element - Must additionally revalidate all elements when
the form is submitted - The user might not tab or click to a required
form element and thereby not generate an onblur
event - Pressing the enter key while an ltinput gt is
selected submits the form if using IE (and
doesn't generate an onblur event)
90Validation best practice
- Use onsubmit"return validationFunction()" in
your form tag to check entries - Consider using onblur to immediately check
entries - Doing both means more coding effort ?
- if time is limited, use onsubmit and omit the
onblurs - Repeat the validation in the server side program
- Because users might find way to submit data that
bypasses your JavaScript validation
91What will happen if the user clicks the submit
button without entering anything?
- A) Nothing
- B) An alert is displayed saying Please enter a
number - C) An alert is displayed saying Please enter a
number and nextPage.htm is displayed - D) No alert and nextPage.htm is displayed
- E) No idea
92What will happen if the user clicks the submit
button without entering anything?
- A) Nothing
- B) An alert is displayed saying Please enter a
number - C) An alert is displayed saying Please enter a
number and nextPage.htm is displayed - D) No alert, but nextPage.htm is displayed
- E) No idea
93Validating Numeric Inputs
- Use the isNaN() function
- Returns true if the value is not a number
- An empty string "" will evaluate as false
indicating it is a number (when clearly an empty
string is not a number!) - So prior to the isNaN() test, add another test to
ensure something is entered. - Returns false if the value is a number (or is an
empty string) - Syntax
if (isNaN(document.example.num.value) true)
alert ("You must enter a value that is a
number") document.example.num.select() return
false
94Validating Numeric and Text Inputs
- Regular Expressions
- Syntax
-
var testNumber /\d/ if(testNumber.test(d
ocument.frmCourse.c_credits.value) false)
alert("Please enter a number for course
credits") document.frmCourse.c_credits.select()
return false
testName /a-zA-Z/ if(testName.test(exampl
e.name.value) false) alert("Please enter
only letters for your user name") example.name.s
elect() return false
http//gnosis.cx/publish/programming/regular_expre
ssions.html
95What will happen if the user clicks the submit
button after entering a number?
- A) Nothing
- B) An alert is displayed saying Please enter a
number - C) An alert is displayed saying Please enter a
number and nextPage.htm is displayed - D) No alert and nextPage.htm is displayed
- E) No idea
96Validating Date Inputs
- There are many ways to do this none
particularly elegant - Use user entry to create a new Date object and
test for NaN - Doesn't work in all browsers and doesn't do a
very good job of validating the date - Write your own custom function to validate the
date - gets lengthy
- Use a regular expression to validate the date
- Also lengthy (and cryptic) if you attempt
rigorous validation - Examples these aren't completehttp//cs.uwec.e
du/morriscm/priv/Spr14/CS268/_ClassNotes/customDa
teValidationFunction.htm
97Validating Numeric Ranges
- Assuming you have already confirmed the user
input is a valid number using isNaN, the syntax
is
var PIN parseInt(document.login.UserPIN.value)
if (PIN lt 1000 PIN gt 9999) alert("The PIN
must be a number between 1000 and 9999")
document.login.UserPIN.select() return
false
98Validating Numeric Ranges
- Assuming you have already confirmed the user
input is a valid number using isNaN and all you
care about is that it be a 4 digit number
if (document.frmExample.num.value.length ! 4)
alert("The number must have 4 digits")
document.frmExample.num.select() return
false
99Validating Numeric Entry and Length
- Using Regular Expression
- Example requires 4 digit number it can begin
with zeros - Example requires 4 digit number beginning with
1 or higher
rePin /0-94/ if(!rePin.test(document.frmNa
me.txtNumber.value))
rePin /1-90-93/ if(!rePin.test(document.
frmName.txtNumber.value))
http//www.zytrax.com/tech/web/regex.htm
100Order of validation example
- Top to bottom, left to right (as if reading)
- The following has top to bottom order
- Do all validations for name first, then age, then
date
101Assume we only care that "something" is entered
for name. Only one validation is needed for name.
We need three separate tests to validate age.
isNaN won't catch empty entries. And we need
to ensure age is in a (somewhat) reasonable range.
This regular expression will catch empty entries
(no need for a separate test). It doesn't ensure
a reasonable range but I'm not going to require
this for this class.
Notice that if an error is discovered, the user
is notified without trying to find additional
errors. This is avoid overwhelming the user with
multiple errors all at once. After fixing the
error and resubmitting, additional errors will be
brought to their attention.
102Validating a select list
- If size"1" (the default value) the first item in
the list is always selected by default (until the
user selects something else) - The selectedIndex of the first item in the list
is 0 (zero) - If size is greater than 1 (a list instead of a
drop down combo box) by default, nothing is
initially selected - and the initial value for selectedIndex is -1
- selectedIndex is what you check to see if
something is selected. If it is -1 the user
needs to select something.
103select example
size gt 1 so selectedIndex's initial value is
-1 (if size 0 selectedIndex'sinitial value
is 0 and the firstitem is selected by default)
104Validating checkboxes
- First of all, why validate a checkbox?
- Perhaps you've got a single checkbox at the
bottom of the page for the user to check
indicating they have read and accept an
agreement? (see this all the time) - In other instances, there may be no need to
validate a checkbox - Perhaps there is a list of checkboxes indicating
user preferences and there is no need for a
user to check any of them - Don't validate unless it makes sense to do so!
105Validating checkboxes
checked property is true if checked
106Validating radio inputs
- A group of radio inputs will all have the same
name - You must check each array element to see if one
of them is checked - If there are lots of radio inputs in the group
or if the group of radio inputs is generated from
a database query and you don't know how many will
be generated - Use a loop to process the array storing the radio
inputs and see if one is selected
107Validating radio inputs(without using a loop)
Look at each array element individually to see if
checked.In this example there are only two
elements in the group.
108Validating radio inputs(using a loop assume
there are "lots" of choices in the radio group
color)
The length property stores how many elements are
in the array
If any element in the array is checked there is
no need to continue looking there can only be
one selected (checked) element in a radio
group. If index is still -1, a checked radio
input wasn't found in the array
109Dreamweavers form validation
- Dreamweaver will automatically generate a
Javascript function to validate form inputs
110Dreamweaver allows you to
- Specify required fields
- Specify that field data types must be numbers
- Specify number ranges
111Dreamweaver Pros and Cons
- Pros?
- Easier and faster to add a script!
- Cons?
- You lose control of
- Message text
- Selecting the input with the error
- Can't validate dates
- Single alert displays message about each error
(is this good?) - Nasty looking JavaScript care to modify the
generated code?
112Dreamweaver Generated JavaScript
Easy to understand and modify this code no?
113Similar code rewritten for human eyes
Easy to understand and modify this code
(including features Dreamweaver can't add yes!)
114Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Stuff...
115Debugging JavaScript Programs
- What happens when a script fails?
- Whatever it was supposed to do doesn't happen
- No error messages unless the browser you are
using is configured to show the error(s) - All of the major browsers now have decent
JavaScript debugging tools built in. - I'll show a few in class
116All browsers cache cookies and pages
- For example Firefox enter aboutcache in the
address bar
Make sure you aren't viewing a cached page that
doesn't have your changes in it! When using
Firefox, press Ctrl-F5 at the same time to make
Firefox get a new page instead of using its cache.
117Finding Errors when the error console isn't
enough
- Strategies
- Determine if the function is actually getting
called - Display a short alert message as the first line
of the function - If the function is getting called, then determine
which line is crashing - Display a short alert before every line to see
how far you are getting - or
- Cut out approximately half of the code and see if
the error still occurs. If it does, the error is
in the remaining half, if not, the error is in
the half you cut out. - When cutting out code save it somewhere so you
can add it back after you find the error. - Be careful where you cut the code. You can
introduce new errors if you cut in a way that
introduces mismatched curly braces or splits a
string constant across two lines.
118Topics
- Introduction to JavaScript
- Positioning a script
- Variables
- Type conversions
- Concatenation
- HTML forms
- Document Object Model
- Functions
- Form Validation
- Debugging
- Stuff...
119Displaying a Confirm Message
- Confirm message is similar to an alert but it
has an OK and a Cancel button
120Examples using confirm
Alternate and equivalent code
121The following code segments are equivalent
- Yes
- No
- Don't know
122Changing the window location
- Doesnt open a new window, changes location of
current browser window - window.location.href "new URL"
- Examples window.location.href
"http//www.google.com" window.location.href
"orders.htm" window.location.href
"..\products\catalog.htm"
123window.open
- Pop up ad blockers will block a window.open
command from events other than the onclick event - window.open called from an onclick event is
allowed by most pop up blockers.
Blocked
ltbody onload"window.open('advertisement.html')"gt
ltimg src"drgdx.gif" onmouseover"window.open('ad
vertisement.html')"gt
Not blocked
ltinput type"button" value"Open Window"
onclick"window.open('advertisement.html')"gt ltimg
src"drgdx.gif" onclick"window.open('advertiseme
nt.html')"gt
124Opening a new window
- var window_id window.open(url, name, options,
replace ) - var window_id is optional if used, window_id
can be used to close, resize, or move the new
window to a different spot on the screen. - url is optional if omitted a blank browser
window is displayed - name is optional
- What happens if you execute the window.open()
method twice, with the same name (also called
target) argument? Like HTML-generated windows, if
you specify the name of a window that already
exists, open() simply uses that existing window
rather than opening a new one. - options define the properties of the new
browser window - replace is optional - If true, the new location
will replace the current page in the browser's
navigation history. Note that some browsers will
simply ignore this parameter
125Opening a new window
toolbar displays the browser toolbar toolbaryes toolbarno
location displays the address field in the browser locationyes locationno
directories displays the window title bar links to frequently used URLs directoriesyes directoriesno
status displays the status bar at the bottom edge of the window statusyes statusno
menubar displays the browser menu bar menubaryes menubarno
scrollbar displays scrollbars on the browser scrollbaryes scrollbarno
resizable allows the user to resize the browser window resizeableyes resizeableno
width, height specifies the browser window width and height, in pixels width300 height200
126Opening a new window
var wParams "height160,width550,menubarno,too
lbarno,titlebarno,"
"resizableno,locationno,statusno,directoriesno
" var adWindow window.open("ad.htm","",wParams
) adWindow.moveTo(230, 350)
127Arrays
- Code creating an array and retrieving its
contents
ltscriptgt var classes new Array() classes0
"CS 491" classes1 "CS 352" classes2
"CS 319" classes3 "CS 163" function
displayClasses() for (var i 0 i lt
classes.length i) document.write(classesi
"ltbrgt") lt/scriptgt
128Arrays
- HTML input elements are stored as arrays
- Example
function DisplayElements() var msg
"" for(var i 0 i lt document.frmOrderItem.elem
ents.length i) msg
document.frmOrderItem.elementsi.name ""
document.frmOrderItem.elementsi
.value "\n" alert(msg)
129Arrays
- Radio inputs are in arrays
- Validating a radio input is checked sometimes
requires array processing
function ValidateRadioSelected() var index
-1 for(var i0 iltdocument.frmOrderItem.color.le
ngth i) if(document.frmOrderItem.colori.c
hecked) index i break if(index
gt 0) alert(document.frmOrderItem.colorindex
.value " is checked") return true
else alert("Please select a
color") document.frmOrderItem.color0.focus()
return false
130window.setTimeout
- Can omit the window.
- Executes Javascript commands after a specified
amount of time elapsessetTimeout("commandOrFunct
ion", timeToWaitInMilliSeconds)setTimeout("aler
t('5 seconds have elapsed')", 5000)
131window.setInterval
- Similar to setTimeout except will continue to
execute the command(s) again and again after the
specified time elapses.setInterval(commandOrFunc
tion, timeToWaitInMilliSeconds)setInverval(aler
t("5 seconds have elapsed"), 5000)
http//ejohn.org/blog/how-javascript-timers-work/
132window.screen
- Useful to center browser window in the screen
- But only if you opened the window using
window.open - Can be used to download smaller images to
browsers with lower color depths or resolution - Which could make page downloads faster
- But this is a lot of work and normally isn't done
- screen.height screen's height in pixels
- screen.width screen's width in pixels
- screen.colorDepth bits used to display color
133What will this do?
Here's the code as text if you want to copy and
paste it in a new page and then test it to see
what it does
lthtmlgtltheadgtlttitlegtWhat does this
do?lt/titlegt ltscriptgt var x 0 var y 0 var
direction "down" var winID function
initializeBrowser() var wParams
"height200,width400,top0,left0" winID
window.open("", "", wParams) setInterval('moveB
rowser()', 1) function moveBrowser()
if(direction "down" y gt
screen.availHeight - 200) direction
"up" else if(direction "up" y lt 50)
winID.close() this.close() if(dire
ction "down") x 4 y 4 else
x - 4 y - 4 winID.moveTo(x,
y) winID.focus() lt/scriptgt lt/headgt ltbodygt lt
input type"button" onclick"initializeBrowser()"
value"Start"gt lt/bodygtlt/htmlgt
134JavaScript Events
- Ways to assign
- inline (works in all browsers) ltinput
type"button" onclick"myFunction()"gt - traditional (using JavaScript works in all
browsers) obj document.getElementByID("relevan
tID") obj.onclick myFunction - W3C (JavaScript can add several event listeners
to the same event for the same object) obj
document.getElementByID("relevantID") obj.addEve
ntListener('click', myFunction, false) - Microsoft (JavaScript) obj document.getElement
ByID("relevantID") obj.attachEvent('click',
myFunction, false)
http//www.quirksmode.org/js/introevents.html
135JavaScript Events
- If you use the traditional method (works in all
browsers) - declare function with a single parameter (any
name will do but e is often used)function
myFunction(e) - Parameter references the event object in browsers
OTHER than IE - If using IE parameter is ignored
- IE references the event object using window.event
- Detecting browser (and type of code to
use)if(window.event) // IE orif(e) // not
IE assumes named parameter e
136JavaScript Events
- Event object properties/methods
- Varies between IE and rest of world
- The following link lists many of them
http//www.javascriptkit.com/domref/domevent.shtml
137JavaScript Events
- Recommendation?
- Use traditional rather than inline if you need
access to the event object - Useful to prevent Firefox from automatically
doing drag and drops with images - Some say use it all the time
- Separates code from html markup
- Allows access to the event object
- (IE always allows access - other browsers need an
e parameter) - But results in more complicated codesee next
slide
138JavaScript Events
Less code and less complicated
139JavaScript Events
Wait until page finishes loading to initialize
the events
Retrieve the element and assign a function to
relevant events
I'm not showing it, but you will need to
pre-cache the images
Retrieve the element triggering the event. Code
varies between IE and rest of world
Recent Firefox versions automatically drag all
images when mouse is pressed and dragged over the
image. IE throws an error over this code. Other
browsers just ignore it. This prevents Firefox
from dragging the image. See next slide for
revised way to do this.
140Block image dragging
141What is the result?
- Name was Smith
- Name was not Smith
- Same as previous question, you didn't change a
thing
142Pitfall Using or
- ' ' is the assignment operator
- Used to assign values to variables
- Example var name "Smith"
- ' ' is the equality operator
- Used to compare values
- Example if ( name "smith")
- Javascript will accept this error
if( name "smi