Copyright Penny McIntire, 2007 Things to Do with JavaScript.

48
copyright Penny McIntire, Things to Do with JavaScript

Transcript of Copyright Penny McIntire, 2007 Things to Do with JavaScript.

Page 1: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

copyright Penny McIntire, 2007

Things to Do with JavaScript

Page 2: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

2

copyright Penny McIntire, 2007

Things to Do with JavaScript• Auto email with reset confirm• Auto email with data validation a

nd autofocus• Rename a button• Change background color• View URL• Set timer • Open a window

Page 3: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

3

copyright Penny McIntire, 2007

Things to Do with JavaScript• Display date• Print page• Save and access a cookie• Sniff the browser• Data validation • Preload images• FlyoutDropdown menus

Page 4: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

4

copyright Penny McIntire, 2007

Auto Email• You can create an html form, then

automatically email the data captured from the form…

JSAutoEmail.html

Page 5: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<html><head><title>Autoemail</title><script language="JavaScript"> function allowReset() { return window.confirm(“Clear the form?") }</script></head>

Page 6: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<body><form method=post action="mailto:[email protected]?

subject=Prospective Customer&body=Some standard message could go here"

onReset="return allowReset()" enctype = "text/plain">

<p>Enter your first name:</p> <input type="text" name="firstName" value = "Penny"><p> Enter your last name: <input type="text" name="lastName" value = "McIntire"><p> <input type="radio" name="gender" value = "male" checked>Male <input type="radio" name="gender" value = "female">Female <p> <input type="checkbox" name="retired">I am retired<p> <input type="reset"> <input type="submit" value = "Submit this now!"></form></body></html>

action = “mailto:…

Executes the function allowReset to double check.

Page 7: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

7

copyright Penny McIntire, 2007

Auto Email• This confirms the reset before

clearing the form. • If the function returns true, it

resets.• If the function returns false, it does

not. • onSubmit works the same way, to

interrupt the process before sending the form to the server.

Page 8: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

8

copyright Penny McIntire, 2007

Auto Email• “Secret” email should never be

used, and, in fact, modern versions of browsers don’t allow secret email; a window is displayed asking user permission.

• There seems to be an upper limit of 2044 characters for the content of an auto email.

Page 9: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

9

copyright Penny McIntire, 2007

Auto Email with Editing and Autofocus

• Now let’s simplify the email part and check for empty fields as well as autofocus on appropriate fields…

JSAutoEmail2.html

Page 10: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<html><head><title>Auto Email with Editing and Autofocus</title>

<script language="JavaScript">function submitForm() { if (document.loginForm.firstName.value == "" && document.loginForm.lastName.value == "") {

alert( "Please enter your first and last names"); document.loginForm.firstName.focus(); return false;

} else if(document.loginForm.firstName.value == "") { alert( "Please enter your first name"); document.loginForm.firstName.focus(); return false;

} else if(document.loginForm.lastName.value == "") { alert( "Please enter your last name "); document.loginForm.lastName.focus(); return false;

} else { return true;

}} </script></head>

“Return false;” aborts the “submit” part of autosubmit.“Return true;”

submits the email.

Sets focus on empty

field.

Page 11: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<body onLoad="document.loginForm.firstName.focus();">

<h1>Auto Email with Editing and Autofocus</h1><form name="loginForm" method=post

action="mailto:[email protected]" enctype = "text/plain" onSubmit="return

submitForm()"> <p>Enter your first name:

<input type="text" name="firstName"></p> <p>Enter your last name:

<input type="text" name="lastName"></p> <input type="submit"></p></form></body></html>

onSubmit captures the submit and sends it to the function. A false return aborts the autoemail.

Sets focus on first field, when page

opens.

Page 12: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

12

copyright Penny McIntire, 2007

Rename a Button

JSRenameButton .html

Page 13: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<html><head>

<script language = "JavaScript">function getButtonName(){ var newName = prompt("Rename the button, please") document.myForm.myButton.value=newName}</script></head>

<body><form name = "myForm"> <input type = "button" name = "myButton" value = “Click to rename me"

onClick="getButtonName()"></form>

</body></html>

Tracing through the DOM

Replaces the old value with the new one.

Sets up the button.

Page 14: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

14

copyright Penny McIntire, 2007

Change Background Color

JSChangeBackground.html

Page 15: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<html><head><script language = "JavaScript">

function newBackColor(color) { if (color == 1) {document.bgColor="red"} if (color == 2) {document.bgColor="green"} if (color == 3) {document.bgColor="blue"}

}</script></head>

<body><h1>We love color!</h1><form> To change the background color, click on a button below:<br><br> <input type = "button" value = "red" onClick = "newBackColor(1)"> <input type = "button" value = "green" onClick = "newBackColor(2)"> <input type = "button" value = "blue" onClick = "newBackColor(3)"></form></body></html>

Changes the document property “bgColor”

Page 16: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

16

copyright Penny McIntire, 2007

View URL

JSViewURL.html

Page 17: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<html><head><script language = "JavaScript">

function getURL (){

alert(“You are in document: " + document.location)}

</script></head>

<body><h1>We love URLs!</h1><form> To find out your current URL:<br><br> <input type = "button" value = "Show Me URL" onClick = “getURL()"></form></body></html>

Page 18: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

18

copyright Penny McIntire, 2007

Timer

JSTimer.html

Page 19: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<html><head><script language = "JavaScript">

var myTimer function launchTimer() {

myTimer = setTimeout("alert('Sorry, your time is up!')",5000) }</script></head>

<body><h1>You must do something on this page within 5 seconds!</h1><script language = "JavaScript">launchTimer()</script>

<form name = "myForm"><input type = "button" value = “Press me to stop timer!"

onClick = “clearTimeout(myTimer)”</form></html>

5000 x 1/1000 of a second

JavaScript method

Or, <body onload="launchTimer() ">

What to do when timer fires

Page 20: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

20

copyright Penny McIntire, 2007

Open a Window

JSOpenNewWindow.html

Page 21: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<html><head><script language = "JavaScript">function myNewWindow() { window.open("http://www.niu.edu",

"newWindow", "height=100,width=100,status=yes");

newWindow.focus(); }</script></head><body><h1>Open New Window</h1><form name = "myForm"> <input type = "button" value = "Open Window"

onClick = "myNewWindow()"></form></html>

(“URL”, “window name”, “parameters”)

See page 885 of DHTML.

Page 22: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

22

copyright Penny McIntire, 2007

Display Date

JSDisplayDate.html

Page 23: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<html><head>

<script language = "JavaScript">

var myDate = new Date();

var myDay=myDate.getDate(), //day number in month

myDayOfWeek=myDate.getDay(), //day number in week

myMonth=myDate.getMonth(), //month number

myYear=myDate.getFullYear(); //year number

switch (myDayOfWeek) {

case 0: dayName = "Sunday"; break;

case 1: dayName = "Monday"; break;

case 2: dayName = "Tuesday"; break;

case 3: dayName = "Wednesday"; break;

case 4: dayName = "Thursday"; break;

case 5: dayName = "Friday"; break;

default: dayName = "Saturday"; break;

}

If “new Date” with no constructors, it gets

today’s date.

getYear method is unpredictable in earlier browsers because of Y2K

Page 24: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

switch (myMonth) { case 0: monthName = "January"; break; case 1: monthName = "Februrary"; break; case 2: monthName = "March"; break; case 3: monthName = "April"; break; case 4: monthName = "May"; break; case 5: monthName = "June"; break; case 6: monthName = "July"; break; case 7: monthName = "August"; break; case 8: monthName = "September"; break; case 9: monthName = "October"; break; case 10: monthName = "November"; break; default: monthName = "December";}</script></head>

Page 25: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

<body><script language = "JavaScript"> document.writeln("The system date looks like this..." + myDate +"<br>") document.writeln("Today's date is: " +

dayName + ", " + monthName + " " + myDay + ", " + myYear + "<br>")</script></body></html>

Page 26: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

26

copyright Penny McIntire, 2007

Printing a Page• To print a page…<a href="#"

onClick="window.print();">Print this page

</a>

Page 27: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

27

copyright Penny McIntire, 2007

Cookies• As your web application executes,

and perhaps links from page to page, it can be important to keep track of various pieces of information.

• For instance, a user might log in on the first page, and you might want to display that user’s name on a page he or she links to later.

Page 28: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

28

copyright Penny McIntire, 2007

Cookies• Traditional (non-web) applications

have no trouble with this “keeping state” or handling “persistence” – they aren’t hopping from page to independent page, and even if they were, they would simply write important data out to disk.

Page 29: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

29

copyright Penny McIntire, 2007

Cookies• It’s not so easy with web

applications.– Each document is independent and

can’t easily communicate with another document.

– “Writing out to disk” means hitting the server, which is time consuming, and it might mean storing thousands of entries on the server per day, which eats up disk space rapidly.

Page 30: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

30

copyright Penny McIntire, 2007

Cookies• So, we have cookies.• Think of them as special, hidden

cookie jars, kept on the client, in which the client or the server can drop tidbits of information for later retrieval.

• Examples of cookie use:– When a web site remembers your

name or password. – When a shopping cart remembers

what you have already chosen as you browse from page to page.

Page 31: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

31

copyright Penny McIntire, 2007

Cookies• There are some limitations to

cookies:– A web browser can retain a maximum

of only 300 cookies.– Only 20 may be “owned” by a given

domain (i.e., cs.niu.edu could store only 20 cookies on your machine).

– Each cookie must be under 4K in length, 2K for older browsers.

Page 32: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

32

copyright Penny McIntire, 2007

Cookies• You can open your cookies file…

– In IE, under Temporary Internet Files

Page 33: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

33

copyright Penny McIntire, 2007

Cookies• Cookies store:

– The domain name that created the cookie.

– Whether the server or JavaScript within the browser stored the cookie.

– Whether or not the cookie should be transported using SSL.

– The expiration date. – The name and value pair that you

want to store in the cookie…

Page 34: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

34

copyright Penny McIntire, 2007

Cookies– For instance, if you want to save the

user’s first name, you might have a name/value pair like firstName= Penny.

Page 35: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

35

copyright Penny McIntire, 2007

Cookies• The format of the string used to

set a cookie is as follows:document.cookie =

‘myNewCookie=value you have assigned’ + ‘expires=Friday, 30-Mar-2001 23:59:59 GMT;’

– This leaves a cookie with the name myNewCookie, with the value “value you have assigned”, which expires on March 30 at 1 second before midnight.

– Let’s look at the individual parts here…

Page 36: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

36

copyright Penny McIntire, 2007

Cookies• ‘myNewCookie=value you have

assigned’‘name=value you have assigned’ – The value part is required.– No semicolons, commas, or blanks in the

whole “name” part, OR • Encode the value part of the pair with the

JavaScript escape() function to take care of any special characters.

• Use the unescape() function later, when retrieving the cookie, to get back to the original characters.

– If two cookies have the same name, the new one overwrites the old one.

Page 37: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

37

copyright Penny McIntire, 2007

Cookies• ‘expires=Friday, 30-Mar-2001

23:59:59 GMT;’ – Can use the JavaScript Date object

format shown here, or use a calculation for the date and time in milliseconds since January 1, 1970, GMT.

– If this is omitted, the cookie expires automatically at the end of the session.

Page 38: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

38

copyright Penny McIntire, 2007

Saving a Cookie• Example and code from W3C: http://www.w3schools.com/JS/

js_cookies.asp

Page 39: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

39

copyright Penny McIntire, 2007

Sniffing the Browser and Version

• There are lots of scripts floating around to check for the browser type and version.

• If you check this, you can write completely different versions of the page for the different browsers.

• But, is this a good thing???– A maintenance nightmare to avoid

whenever possible.

Page 40: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

40

copyright Penny McIntire, 2007

Sniffing the Browser and Version

• If you really must include something for a particular browser, if might be better to have just a single document, with small areas that check for the browser, rather than having two completely different pages.

Page 41: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

41

copyright Penny McIntire, 2007

Sniffing the Browser and Version

• Can instead check to see if a particular feature that you’re using is supported – less of a maintenance problem.

• Example:if (document.layers) //Navigator <6.0

• In any case, there is code out there that you can download to do the sniffing. – Check www.thejavascriptsource.com .

Page 42: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

42

copyright Penny McIntire, 2007

Data Validation• “Your task is to anticipate every

possible entry that users could make and let through only those your scripts can use.” Danny Goodman

• Also, use checkboxes and radio buttons whenever possible, to ensure that invalid data entry doesn’t occur.

Page 43: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

43

copyright Penny McIntire, 2007

Data Validation• Verifying just before the form is

submitted:– Use the onSubmit = event on the form

to execute a function that does final validation.

• Example: checking if a field is all digits…

Page 44: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

function isDigits(inString){ if(inString.value.length == 0)

return false;

for(i=0; i < inString.length ; i++) { char = inString.substring(i, i+1);

if (char > "9" || char < "0") return false; } return true;}

Page 45: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

45

copyright Penny McIntire, 2007

Preloading Images• Preload images

– When a user mousesover a button for the first time, the mouseover effect could take a while to show up if it has to wait for the image to download.

– As an alternative, download all of the images for the page when the page itself downloads, so they are all ready and waiting.

– Code for this is automatically done by Dreamweaver unless you deliberately tell it not to add the code…

Page 46: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

46

copyright Penny McIntire, 2007

Preloading Imagesfunction MM_preloadImages()

• Good luck understanding Dreamweaver’s code. Nonetheless, it works.

• Essentially, onLoad in the <body> calls the function to reference each image that doesn’t appear on the original page (like rollover images), which forces a download of the image right then, instead of waiting until the user mouseovers.

Page 47: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

47

copyright Penny McIntire, 2007

Flyout/Drop Down Menus• Two easy (?) ways to do this:

– Go to The JavaScript Source and copy in one of their cross-browser scripts.

– Use Dreamweaver’s Show/Hide Layers; i.e., create semi-manually.

– Use Dreamweaver Window > Behaviors to create automatically. • Fairly reliable in last couple of versions?• Still need to tweak the CSS so that the

dropdowns fit with the look of your page.

Page 48: Copyright Penny McIntire, 2007 Things to Do with JavaScript.

48

copyright Penny McIntire, 2007

Resources• http://www.damienmjones.com/wo

rk/obfuscator.htm email address obfuscator, so that spammers can’t harvest email addresses from mailto: links.

• http://news.yahoo.com/rss/ Example of how RSS can be used.