JavaScript Advance 3
JavaScript Advance 3
The JavaScript Navigator object contains information about the visitor's browser.
Browser Detection
Almost everything in this tutorial works on all JavaScript-enabled browsers. However, there are
some things that just don't work on certain browsers - especially on older browsers.
So, sometimes it can be very useful to detect the visitor's browser, and then serve up the
appropriate information.
The best way to do this is to make your web pages smart enough to look one way to some browsers
and another way to other browsers.
JavaScript includes an object called the Navigator object, that can be used for this purpose.
The Navigator object contains information about the visitor's browser name, version, and more.
The JavaScript Navigator object contains all information about the visitor's browser. We are going to
look at two properties of the Navigator object:
Example
<html>
<body>
<script type="text/javascript">
var browser=navigator.appName;
var b_version=navigator.appVersion;
var version=parseFloat(b_version);
</body>
</html>
The variable browser in the example above holds the name of the browser, i.e. "Netscape" or
"Microsoft Internet Explorer".
The appVersion property in the example above returns a string that contains much more information
than just the version number, but for now we are only interested in the version number. To pull the
version number out of the string we are using a function called parseFloat(), which pulls the first
thing that looks like a decimal number out of a string and returns it.
IMPORTANT! The version number is WRONG in IE 5.0 or later! Microsoft starts the appVersion
string with the number 4.0. in IE 5.0 and IE 6.0!!! Why did they do that??? However, JavaScript is
the same in IE6, IE5 and IE4, so for most scripts it is ok.
The example below displays a different alert, depending on the visitor's browser:
Example
<html>
<head>
<script type="text/javascript">
function detectBrowser()
{
var browser=navigator.appName;
var b_version=navigator.appVersion;
var version=parseFloat(b_version);
if ((browser=="Netscape"||browser=="Microsoft Internet Explorer")
&& (version>=4))
{
alert("Your browser is good enough!");
}
else
{
alert("It's time to upgrade your browser!");
}
}
</script>
</head>
<body onload="detectBrowser()">
</body>
</html>
More Examples
JavaScript Cookies
A cookie is often used to identify a user.
What is a Cookie?
A cookie is a variable that is stored on the visitor's computer. Each time the same computer
requests a page with a browser, it will send the cookie too. With JavaScript, you can both create and
retrieve cookie values.
Examples of cookies:
• Name cookie - The first time a visitor arrives to your web page, he or she must fill in
her/his name. The name is then stored in a cookie. Next time the visitor arrives at your
page, he or she could get a welcome message like "Welcome John Doe!" The name is
retrieved from the stored cookie
• Password cookie - The first time a visitor arrives to your web page, he or she must fill in a
password. The password is then stored in a cookie. Next time the visitor arrives at your
page, the password is retrieved from the cookie
• Date cookie - The first time a visitor arrives to your web page, the current date is stored in
a cookie. Next time the visitor arrives at your page, he or she could get a message like
"Your last visit was on Tuesday August 11, 2005!" The date is retrieved from the stored
cookie
In this example we will create a cookie that stores the name of a visitor. The first time a visitor
arrives to the web page, he or she will be asked to fill in her/his name. The name is then stored in
a cookie. The next time the visitor arrives at the same page, he or she will get welcome message.
First, we create a function that stores the name of the visitor in a cookie variable:
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
The parameters of the function above hold the name of the cookie, the value of the cookie, and the
number of days until the cookie expires.
In the function above we first convert the number of days to a valid date, then we add the number
of days until the cookie should expire. After that we store the cookie name, cookie value and the
expiration date in the document.cookie object.
Then, we create another function that checks if the cookie has been set:
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
The function above first checks if a cookie is stored at all in the document.cookie object. If the
document.cookie object holds some cookies, then check to see if our specific cookie is stored. If our
cookie is found, then return the value, if not - return an empty string.
Last, we create the function that displays a welcome message if the cookie is set, and if the cookie
is not set it will display a prompt box, asking for the name of the user:
function checkCookie()
{
username=getCookie('username');
if (username!=null && username!="")
{
alert('Welcome again '+username+'!');
}
else
{
username=prompt('Please enter your name:',"");
if (username!=null && username!="")
{
setCookie('username',username,365);
}
}
}
Example
<html>
<head>
<script type="text/javascript">
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function checkCookie()
{
username=getCookie('username');
if (username!=null && username!="")
{
alert('Welcome again '+username+'!');
}
else
{
username=prompt('Please enter your name:',"");
if (username!=null && username!="")
{
setCookie('username',username,365);
}
}
}
</script>
</head>
<body onload="checkCookie()">
</body>
</html>
The example above runs the checkCookie() function when the page loads.
Required Fields
The function below checks if a required field has been left empty. If the required field is blank, an
alert box alerts a message and the function returns false. If a value is entered, the function returns
true (means that data is OK):
function validate_required(field,alerttxt)
{
with (field)
{
if (value==null||value=="")
{
alert(alerttxt);return false;
}
else
{
return true;
}
}
}
The entire script, with the HTML form could look something like this:
<html>
<head>
<script type="text/javascript">
function validate_required(field,alerttxt)
{
with (field)
{
if (value==null||value=="")
{
alert(alerttxt);return false;
}
else
{
return true;
}
}
}
function validate_form(thisform)
{
with (thisform)
{
if (validate_required(email,"Email must be filled out!")==false)
{email.focus();return false;}
}
}
</script>
</head>
<body>
<form action="submit.htm" onsubmit="return validate_form(this)" method="post">
Email: <input type="text" name="email" size="30">
<input type="submit" value="Submit">
</form>
</body>
</html>
E-mail Validation
The function below checks if the content has the general syntax of an email.
This means that the input data must contain at least an @ sign and a dot (.). Also, the @ must not
be the first character of the email address, and the last dot must at least be one character after the
@ sign:
function validate_email(field,alerttxt)
{
with (field)
{
apos=value.indexOf("@");
dotpos=value.lastIndexOf(".");
if (apos<1||dotpos-apos<2)
{alert(alerttxt);return false;}
else {return true;}
}
}
The entire script, with the HTML form could look something like this:
<html>
<head>
<script type="text/javascript">
function validate_email(field,alerttxt)
{
with (field)
{
apos=value.indexOf("@");
dotpos=value.lastIndexOf(".");
if (apos<1||dotpos-apos<2)
{alert(alerttxt);return false;}
else {return true;}
}
}
function validate_form(thisform)
{
with (thisform)
{
if (validate_email(email,"Not a valid e-mail address!")==false)
{email.focus();return false;}
}
}
</script>
</head>
<body>
<form action="submit.htm" onsubmit="return validate_form(this);" method="post">
Email: <input type="text" name="email" size="30">
<input type="submit" value="Submit">
</form>
</body>
</html>
JavaScript Animation
With JavaScript we can create animated images.
JavaScript Animation
The trick is to let a JavaScript change between different images on different events.
In the following example we will add an image that should act as a link button on a web page. We
will then add an onMouseOver event and an onMouseOut event that will run two JavaScript
functions that will change between the images.
Note that we have given the image a name to make it possible for JavaScript to address it later.
The onMouseOver event tells the browser that once a mouse is rolled over the image, the browser
should execute a function that will replace the image with another image.
The onMouseOut event tells the browser that once a mouse is rolled away from the image, another
JavaScript function should be executed. This function will insert the original image again.
The changing between the images is done with the following JavaScript:
<script type="text/javascript">
function mouseOver()
{
document.b1.src ="b_blue.gif";
}
function mouseOut()
{
document.b1.src ="b_pink.gif";
}
</script>
Example
<html>
<head>
<script type="text/javascript">
function mouseOver()
{
document.b1.src ="b_blue.gif";
}
function mouseOut()
{
document.b1.src ="b_pink.gif";
}
</script>
</head>
<body>
<a href="http://www.w3schools.com" target="_blank">
<img border="0" alt="Visit W3Schools!" src="b_pink.gif" name="b1"
onmouseOver="mouseOver()" onmouseOut="mouseOut()" /></a>
</body>
</html>
From our HTML tutorial we have learned that an image-map is an image with clickable regions.
Normally, each region has an associated hyperlink. Clicking on one of the regions takes you to the
associated link. Look at our simple HTML image-map.
We can add events (that can call a JavaScript) to the <area> tags inside the image map. The
<area> tag supports the onClick, onDblClick, onMouseDown, onMouseUp, onMouseOver,
onMouseMove, onMouseOut, onKeyPress, onKeyDown, onKeyUp, onFocus, and onBlur events.
Here's the HTML image-map example, with some JavaScript added:
Example
<html>
<head>
<script type="text/javascript">
function writeText(txt)
{
document.getElementById("desc").innerHTML=txt;
}
</script>
</head>
<body>
<img src="planets.gif" width="145" height="126"
alt="Planets" usemap="#planetmap" />
<map name="planetmap">
<area shape ="rect" coords ="0,0,82,126"
onMouseOver="writeText('The Sun and the gas giant planets like Jupiter
are by far the largest objects in our Solar System.')"
href ="sun.htm" target ="_blank" alt="Sun" />
<p id="desc"></p>
</body>
</html>
It's very easy to time events in JavaScript. The two key methods that are used are:
Note: The setTimeout() and clearTimeout() are both methods of the HTML DOM Window object.
Syntax
The setTimeout() method returns a value - In the statement above, the value is stored in a variable
called t. If you want to cancel this setTimeout(), you can refer to it using the variable name.
The first parameter of setTimeout() is a string that contains a JavaScript statement. This statement
could be a statement like "alert('5 seconds!')" or a call to a function, like "alertMsg()".
The second parameter indicates how many milliseconds from now you want to execute the first
parameter.
Example
When the button is clicked in the example below, an alert box will be displayed after 5 seconds.
Example
<html>
<head>
<script type="text/javascript">
function timedMsg()
{
var t=setTimeout("alert('5 seconds!')",5000);
}
</script>
</head>
<body>
<form>
<input type="button" value="Display timed alertbox!"
onClick="timedMsg()" />
</form>
</body>
</html>
Example - Infinite Loop
To get a timer to work in an infinite loop, we must write a function that calls itself. In the example
below, when the button is clicked, the input field will start to count (for ever), starting at 0:
Example
<html>
<head>
<script type="text/javascript">
var c=0
var t
function timedCount()
{
document.getElementById('txt').value=c;
c=c+1;
t=setTimeout("timedCount()",1000);
}
</script>
</head>
<body>
<form>
<input type="button" value="Start count!" onClick="timedCount()" />
<input type="text" id="txt" />
</form>
</body>
</html>
Syntax
clearTimeout(setTimeout_variable)
Example
The example below is the same as the "Infinite Loop" example above. The only difference is that we
have now added a "Stop Count!" button that stops the timer:
Example
<html>
<head>
<script type="text/javascript">
var c=0
var t
function timedCount()
{
document.getElementById('txt').value=c;
c=c+1;
t=setTimeout("timedCount()",1000);
}
function stopCount()
{
clearTimeout(t);
}
</script>
</head>
<body>
<form>
<input type="button" value="Start count!" onClick="timedCount()" />
<input type="text" id="txt" />
<input type="button" value="Stop count!" onClick="stopCount()" />
</form>
</body>
</html>
More Examples
JavaScript Objects
Earlier in this tutorial we have seen that JavaScript has several built-in objects, like String, Date,
Array, and more. In addition to these built-in objects, you can also create your own.
An object is just a special kind of data, with a collection of properties and methods.
Let's illustrate with an example: A person is an object. Properties are the values associated with the
object. The persons' properties include name, height, weight, age, skin tone, eye color, etc. All
persons have these properties, but the values of those properties will differ from person to person.
Objects also have methods. Methods are the actions that can be performed on objects. The persons'
methods could be eat(), sleep(), work(), play(), etc.
Properties
objName.propName
You can add properties to an object by simply giving it a value. Assume that the personObj already
exists - you can give it properties named firstname, lastname, age, and eyecolor as follows:
personObj.firstname="John";
personObj.lastname="Doe";
personObj.age=30;
personObj.eyecolor="blue";
document.write(personObj.firstname);
John
Methods
objName.methodName()
Note: Parameters required for the method can be passed between the parentheses.
personObj.sleep();
personObj=new Object();
personObj.firstname="John";
personObj.lastname="Doe";
personObj.age=50;
personObj.eyecolor="blue";
Adding a method to the personObj is also simple. The following code adds a method called eat() to
the personObj:
personObj.eat=eat;
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
}
Notice that the template is just a function. Inside the function you need to assign things to
this.propertyName. The reason for all the "this" stuff is that you're going to have more than one
person at a time (which person you're dealing with must be clear). That's what "this" is: the
instance of the object at hand.
Once you have the template, you can create new instances of the object, like this:
You can also add some methods to the person object. This is also done inside the template:
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.newlastname=newlastname;
}
Note that methods are just functions attached to objects. Then we will have to write the
newlastname() function:
function newlastname(new_lastname)
{
this.lastname=new_lastname;
}
The newlastname() function defines the person's new last name and assigns that to the person.
JavaScript knows which person you're talking about by using "this.". So, now you can write:
myMother.newlastname("Doe").
This tutorial has taught you how to add JavaScript to your HTML pages, to make your web site more
dynamic and interactive.
You have learned how to create responses to events, validate forms and how to make different
scripts run in response to different scenarios.
You have also learned how to create and use objects, and how to use JavaScript's built-in objects.
For more information on JavaScript, please look at our JavaScript examples and our JavaScript
reference.
The next step is to learn about the HTML DOM and DHTML.
If you want to learn about server-side scripting, the next step is to learn ASP.
HTML DOM
The HTML DOM defines a standard way for accessing and manipulating HTML documents.
The HTML DOM is platform and language independent and can be used by any programming
language like Java, JavaScript, and VBScript.
If you want to learn more about the DOM, please visit our HTML DOM tutorial.
DHTML
DHTML is a combination of HTML, CSS, and JavaScript. DHTML is used to create dynamic and
interactive Web sites.
W3C once said: "Dynamic HTML is a term used by some vendors to describe the combination of
HTML, style sheets and scripts that allows documents to be animated."
If you want to learn more about DHTML, please visit our DHTML tutorial.
ASP
While scripts in an HTML file are executed on the client (in the browser), scripts in an ASP file are
executed on the server.
With ASP you can dynamically edit, change or add any content of a Web page, respond to data
submitted from HTML forms, access any data or databases and return the results to a browser,
customize a Web page to make it more useful for individual users.
Since ASP files are returned as plain HTML, they can be viewed in any browser.
If you want to learn more about ASP, please visit our ASP tutorial.
The HTML Certificate documents your knowledge of HTML, XHTML, and CSS.
The JavaScript Certificate documents your knowledge of JavaScript and HTML DOM.
The XML Certificate documents your knowledge of XML, XML DOM and XSLT.
The ASP Certificate documents your knowledge of ASP, SQL, and ADO.
The PHP Certificate documents your knowledge of PHP and SQL (MySQL).