Pages

13 Oct 2013

JavaScript - Form Validation

Form validation used to occur at the server, after the client had entered all necessary data and then pressed the Submit button. If some of the data that had been entered by the client had been in the wrong form or was simply missing, the server would have to send all the data back to the client and request that the form be resubmitted with correct information. This was really a lengthy process and over burdening server.
JavaScript, provides a way to validate form's data on the client's computer before sending it to the web server. Form validation generally performs two functions.
  • Basic Validation - First of all, the form must be checked to make sure data was entered into each form field that required it. This would need just loop through each field in the form and check for data.
  • Data Format Validation - Secondly, the data that is entered must be checked for correct form and value. This would need to put more logic to test correctness of data.
We will take an example to understand the process of validation. Here is the simple form to proceed :
<html>
<head>
<title>Form Validation</title>
<script type="text/javascript">
<!--
// Form validation code will come here.
//-->
</script>
</head>
<body>
 <form action="/cgi-bin/test.cgi" name="myForm"  
          onsubmit="return(validate());">
 <table cellspacing="2" cellpadding="2" border="1">
 <tr>
   <td align="right">Name</td>
   <td><input type="text" name="Name" /></td>
 </tr>
 <tr>
   <td align="right">EMail</td>
   <td><input type="text" name="EMail" /></td>
 </tr>
 <tr>
   <td align="right">Zip Code</td>
   <td><input type="text" name="Zip" /></td>
 </tr>
 <tr>
 <td align="right">Country</td>
 <td>
 <select name="Country">
   <option value="-1" selected>[choose yours]</option>
   <option value="1">USA</option>
   <option value="2">UK</option>
   <option value="3">INDIA</option>
 </select>
 </td>
 </tr>
 <tr>
   <td align="right"></td>
   <td><input type="submit" value="Submit" /></td>
 </tr>
 </table>
 </form>
 </body>
 </html>

Basic Form Validation:

First we will show how to do a basic form validation. In the above form we are calling validate()function to validate data when onsubmit event is occurring. Following is the implementation of this validate() function:
<script type="text/javascript">
<!--
// Form validation code will come here.
function validate()
{
 
   if( document.myForm.Name.value == "" )
   {
     alert( "Please provide your name!" );
     document.myForm.Name.focus() ;
     return false;
   }
   if( document.myForm.EMail.value == "" )
   {
     alert( "Please provide your Email!" );
     document.myForm.EMail.focus() ;
     return false;
   }
   if( document.myForm.Zip.value == "" ||
           isNaN( document.myForm.Zip.value ) ||
           document.myForm.Zip.value.length != 5 )
   {
     alert( "Please provide a zip in the format #####." );
     document.myForm.Zip.focus() ;
     return false;
   }
   if( document.myForm.Country.value == "-1" )
   {
     alert( "Please provide your country!" );
     return false;
   }
   return( true );
}
//-->
</script>
To understand it in better way you can Try it yourself.

Data Format Validation:

Now we will see how we can validate our entered form data before submitting it to the web server.
This example shows how to validate an entered email address which means email address 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:
<script type="text/javascript">
<!--
function validateEmail()
{
 
   var emailID = document.myForm.EMail.value;
   atpos = emailID.indexOf("@");
   dotpos = emailID.lastIndexOf(".");
   if (atpos < 1 || ( dotpos - atpos < 2 )) 
   {
       alert("Please enter correct email ID")
       document.myForm.EMail.focus() ;
       return false;
   }
   return( true );
}
//-->
</script>

JavaScript - Errors & Exceptions Handling

There are three types of errors in programming: (a) Syntax Errors and (b) Runtime Errors (c) Logical Errors:

Syntax errors:

Syntax errors, also called parsing errors, occur at compile time for traditional programming languages and at interpret time for JavaScript.
For example, the following line causes a syntax error because it is missing a closing parenthesis:
<script type="text/javascript">
<!--
window.print(;
//-->
</script>
When a syntax error occurs in JavaScript, only the code contained within the same thread as the syntax error is affected and code in other threads gets executed assuming nothing in them depends on the code containing the error.

Runtime errors:

Runtime errors, also called exceptions, occur during execution (after compilation/interpretation).
For example, the following line causes a run time error because here syntax is correct but at run time it is trying to call a non existed method:
<script type="text/javascript">
<!--
window.printme();
//-->
</script>
Exceptions also affect the thread in which they occur, allowing other JavaScript threads to continue normal execution.

Logical errors:

Logic errors can be the most difficult type of errors to track down. These errors are not the result of a syntax or runtime error. Instead, they occur when you make a mistake in the logic that drives your script and you do not get the result you expected.
You can not catch those errors, because it depends on your business requirement what type of logic you want to put in your program.

The try...catch...finally Statement:

The latest versions of JavaScript added exception handling capabilities. JavaScript implements the try...catch...finally construct as well as the throw operator to handle exceptions.
You can catch programmer-generated and runtime exceptions, but you cannot catch JavaScript syntax errors.
Here is the try...catch...finally block syntax:
<script type="text/javascript">
<!--
try {
    // Code to run
    [break;]
} catch ( e ) {
    // Code to run if an exception occurs
    [break;]
}[ finally {
    // Code that is always executed regardless of 
    // an exception occurring
}]
//-->
</script>
The try block must be followed by either exactly one catch block or one finally block (or one of both). When an exception occurs in the try block, the exception is placed in e and the catchblock is executed. The optional finally block executes unconditionally after try/catch.

Examples:

Here is one example where we are trying to call a non existing function this is causing an exception raise. Let us see how it behaves without with try...catch:
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
   var a = 100;

   alert("Value of variable a is : " + a );
 
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
To understand it in better way you can Try it yourself.
Now let us try to catch this exception using try...catch and display a user friendly message. You can also suppress this message, if you want to hide this error from a user.
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
   var a = 100;
   
   try {
      alert("Value of variable a is : " + a );
   } catch ( e ) {
      alert("Error: " + e.description );
   }
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
To understand it in better way you can Try it yourself.
You can use finally block which will always execute unconditionally after try/catch. Here is an example:
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
   var a = 100;
   
   try {
      alert("Value of variable a is : " + a );
   }catch ( e ) {
      alert("Error: " + e.description );
   }finally {
      alert("Finally block will always execute!" );
   }
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
To understand it in better way you can Try it yourself.

The throw Statement:

You can use throw statement to raise your built-in exceptions or your customized exceptions. Later these exceptions can be captured and you can take an appropriate action.
Following is the example showing usage of throw statement.
<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
   var a = 100;
   var b = 0;
   
   try{
      if ( b == 0 ){
         throw( "Divide by zero error." ); 
      }else{
         var c = a / b;
      }
   }catch ( e ) {
      alert("Error: " + e );
   }
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
To understand it in better way you can Try it yourself.
You can raise an exception in one function using a string, integer, Boolean or an object and then you can capture that exception either in the same function as we did above, or in other function using try...catch block.

The onerror() Method

The onerror event handler was the first feature to facilitate error handling for JavaScript. Theerror event is fired on the window object whenever an exception occurs on the page. Example:
<html>
<head>
<script type="text/javascript">
<!--
window.onerror = function () {
   alert("An error occurred.");
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
To understand it in better way you can Try it yourself.
The onerror event handler provides three pieces of information to identify the exact nature of the error:
  • Error message . The same message that the browser would display for the given error
  • URL . The file in which the error occurred
  • Line number . The line number in the given URL that caused the error
Here is the example to show how to extract this information
<html>
<head>
<script type="text/javascript">
<!--
window.onerror = function (msg, url, line) {
   alert("Message : " + msg );
   alert("url : " + url );
   alert("Line number : " + line );
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>
You can display extracted information in whatever way you think it is better.
To understand it in better way you can Try it yourself.
You can use onerror method to show an error message in case there is any problem in loading an image as follows:
<img src="myimage.gif"
    onerror="alert('An error occurred loading the image.')" />
You can use onerror with many HTML tags to display appropriate messages in case of errors.

9 Oct 2013

JavaScript - Document Object Model or DOM

Every web page resides inside a browser window which can be considered as an object.
A Document object represents the HTML document that is displayed in that window. The Document object has various properties that refer to other objects which allow access to and modification of document content.
The way that document content is accessed and modified is called the Document Object Model, or DOM. The Objects are organized in a hierarchy. This hierarchical structure applies to the organization of objects in a Web document.
  • Window object: Top of the hierarchy. It is the outmost element of the object hierarchy.
  • Document object: Each HTML document that gets loaded into a window becomes a document object. The document contains the content of the page.
  • Form object: Everything enclosed in the <form>...</form> tags sets the form object.
  • Form control elements: The form object contains all the elements defined for that object such as text fields, buttons, radio buttons, and checkboxes.
Here is a simple hierarchy of few important objects:
HTML DOM
There are several DOMs in existence. The following sections explain each of these DOMs in detail and describe how you can use them to access and modify document content.
  • The Legacy DOM: This is the model which was introduced in early versions of JavaScript language. It is well supported by all browsers, but allows access only to certain key portions of documents, such as forms, form elements, and images.
  • The W3C DOM: This document object model allows access and modification of all document content and is standardized by the World Wide Web Consortium (W3C). This model is supported by almost all the modern browsers.
  • The IE4 DOM: This document object model was introduced in Version 4 of Microsoft's Internet Explorer browser. IE 5 and later versions include support for most basic W3C DOM features.

DOM compatibility

If you want to write a script that uses the W3C DOM when it is available, and otherwise uses the IE 4 DOM if it is available, you can use a capability-testing approach that first checks for the existence of a method or property to determine whether the browser has the capability you desire. For example:
if (document.getElementById) {

  // If the W3C method exists, use it

}

else if (document.all) {

  // If the all[] array exists, use it

}

else {

  // Otherwise use the legacy DOM

}

Regular Expressions and RegExp Object

A regular expression is an object that describes a pattern of characters.
The JavaScript RegExp class represents regular expressions, and both String and RegExpdefine methods that use regular expressions to perform powerful pattern-matching and search-and-replace functions on text.

Syntax:

A regular expression could be defined with the RegExp( ) constructor like this:
var pattern = new RegExp(pattern, attributes);

or simply

var pattern = /pattern/attributes;
Here is the description of the parameters:
  • pattern: A string that specifies the pattern of the regular expression or another regular expression.
  • attributes: An optional string containing any of the "g", "i", and "m" attributes that specify global, case-insensitive, and multiline matches, respectively.

Brackets:

Brackets ([]) have a special meaning when used in the context of regular expressions. They are used to find a range of characters.
ExpressionDescription
[...]Any one character between the brackets.
[^...]Any one character not between the brackets.
[0-9]It matches any decimal digit from 0 through 9.
[a-z]It matches any character from lowercase a through lowercase z.
[A-Z]It matches any character from uppercase A through uppercase Z.
[a-Z]It matches any character from lowercase a through uppercase Z.
The ranges shown above are general; you could also use the range [0-3] to match any decimal digit ranging from 0 through 3, or the range [b-v] to match any lowercase character ranging from b through v.

Quantifiers:

The frequency or position of bracketed character sequences and single characters can be denoted by a special character. Each pecial character having a specific connotation. The +, *, ?, and $ flags all follow a character sequence.
ExpressionDescription
p+It matches any string containing at least one p.
p*It matches any string containing zero or more p's.
p?It matches any string containing one or more p's.
p{N}It matches any string containing a sequence of N p's
p{2,3}It matches any string containing a sequence of two or three p's.
p{2, }It matches any string containing a sequence of at least two p's.
p$It matches any string with p at the end of it.
^pIt matches any string with p at the beginning of it.

Examples:

Following examples will clear your concepts about matching chracters.
ExpressionDescription
[^a-zA-Z]It matches any string not containing any of the characters ranging from a through z and A through Z.
p.pIt matches any string containing p, followed by any character, in turn followed by another p.
^.{2}$It matches any string containing exactly two characters.
<b>(.*)</b>It matches any string enclosed within <b> and </b>.
p(hp)*It matches any string containing a p followed by zero or more instances of the sequence hp.

Literal characters:

CharacterDescription
AlphanumericItself
\0The NUL character (\u0000)
\tTab (\u0009)
\nNewline (\u000A)
\vVertical tab (\u000B)
\fForm feed (\u000C)
\rCarriage return (\u000D)
\xnnThe Latin character specified by the hexadecimal number nn; for example, \x0A is the same as \n
\uxxxxThe Unicode character specified by the hexadecimal number xxxx; for example, \u0009 is the same as \t
\cXThe control character ^X; for example, \cJ is equivalent to the newline character \n

Metacharacters

A metacharacter is simply an alphabetical character preceded by a backslash that acts to give the combination a special meaning.
For instance, you can search for large money sums using the '\d' metacharacter:/([\d]+)000/, Here \d will search for any string of numerical character.
Following is the list of metacharacters which can be used in PERL Style Regular Expressions.
Character  Description
.              a single character
\s             a whitespace character (space, tab, newline)
\S             non-whitespace character
\d             a digit (0-9)
\D             a non-digit
\w             a word character (a-z, A-Z, 0-9, _)
\W             a non-word character
[\b]           a literal backspace (special case).
[aeiou]        matches a single character in the given set
[^aeiou]       matches a single character outside the given set
(foo|bar|baz)  matches any of the alternatives specified

Modifiers

Several modifiers are available that can make your work with regexps much easier, like case sensitivity, searching in multiple lines etc.
ModifierDescription
iPerform case-insensitive matching.
mSpecifies that if the string has newline or carriage return characters, the ^ and $ operators will now match against a newline boundary, instead of a string boundary
gPerform a global matchthat is, find all matches rather than stopping after the first match.

RegExp Properties:

Here is a list of each property and their description.
PropertyDescription
constructorSpecifies the function that creates an object's prototype.
globalSpecifies if the "g" modifier is set.
ignoreCaseSpecifies if the "i" modifier is set.
lastIndexThe index at which to start the next match.
multilineSpecifies if the "m" modifier is set.
sourceThe text of the pattern.

RegExp Methods:

Here is a list of each method and its description.
MethodDescription
exec()Executes a search for a match in its string parameter.
test()Tests for a match in its string parameter.
toSource()Returns an object literal representing the specified object; you can use this value to create a new object.
toString()Returns a string representing the specified object.

Javascript - The Math Object

The math object provides you properties and methods for mathematical constants and functions.
Unlike the other global objects, Math is not a constructor. All properties and methods of Math are static and can be called by using Math as an object without creating it.
Thus, you refer to the constant pi as Math.PI and you call the sine function as Math.sin(x), where x is the method's argument.

Syntax:

Here is the simple syntax to call properties and methods of Math.
var pi_val = Math.PI;
var sine_val = Math.sin(30);

Math Properties:

Here is a list of each property and their description.
PropertyDescription
EEuler's constant and the base of natural logarithms, approximately 2.718.
LN2Natural logarithm of 2, approximately 0.693.
LN10Natural logarithm of 10, approximately 2.302.
LOG2EBase 2 logarithm of E, approximately 1.442.
LOG10EBase 10 logarithm of E, approximately 0.434.
PIRatio of the circumference of a circle to its diameter, approximately 3.14159.
SQRT1_2Square root of 1/2; equivalently, 1 over the square root of 2, approximately 0.707.
SQRT2Square root of 2, approximately 1.414.

Math Methods

Here is a list of each method and its description.
MethodDescription
abs()Returns the absolute value of a number.
acos()Returns the arccosine (in radians) of a number.
asin()Returns the arcsine (in radians) of a number.
atan()Returns the arctangent (in radians) of a number.
atan2()Returns the arctangent of the quotient of its arguments.
ceil()Returns the smallest integer greater than or equal to a number.
cos()Returns the cosine of a number.
exp()Returns EN, where N is the argument, and E is Euler's constant, the base of the natural logarithm.
floor()Returns the largest integer less than or equal to a number.
log()Returns the natural logarithm (base E) of a number.
max()Returns the largest of zero or more numbers.
min()Returns the smallest of zero or more numbers.
pow()Returns base to the exponent power, that is, base exponent.
random()Returns a pseudo-random number between 0 and 1.
round()Returns the value of a number rounded to the nearest integer.
sin()Returns the sine of a number.
sqrt()Returns the square root of a number.
tan()Returns the tangent of a number.
toSource()Returns the string "Math".

8 Oct 2013

JavaScript - The Date Object

The Date object is a datatype built into the JavaScript language. Date objects are created with the new Date( ) as shown below.
Once a Date object is created, a number of methods allow you to operate on it. Most methods simply allow you to get and set the year, month, day, hour, minute, second, and millisecond fields of the object, using either local time or UTC (universal, or GMT) time.
The ECMAScript standard requires the Date object to be able to represent any date and time, to millisecond precision, within 100 million days before or after 1/1/1970. This is a range of plus or minus 273,785 years, so the JavaScript is able to represent date and time till year 275755.

Syntax:

Here are different variant of Date() constructor:
new Date( )
new Date(milliseconds)
new Date(datestring)
new Date(year,month,date[,hour,minute,second,millisecond ])
Note: Paramters in the brackets are always optional
Here is the description of the parameters:
  • No Argument: With no arguments, the Date( ) constructor creates a Date object set to the current date and time.
  • milliseconds: When one numeric argument is passed, it is taken as the internal numeric representation of the date in milliseconds, as returned by the getTime( ) method. For example, passing the argument 5000 creates a date that represents five seconds past midnight on 1/1/70.
  • datestring:When one string argument is passed, it is a string representation of a date, in the format accepted by the Date.parse( ) method.
  • 7 agruments: To use the last form of constructor given above, Here is the description of each argument:
    1. year: Integer value representing the year. For compatibility (in order to avoid the Y2K problem), you should always specify the year in full; use 1998, rather than 98.
    2. month: Integer value representing the month, beginning with 0 for January to 11 for December.
    3. date: Integer value representing the day of the month.
    4. hour: Integer value representing the hour of the day (24-hour scale).
    5. minute: Integer value representing the minute segment of a time reading.
    6. second: Integer value representing the second segment of a time reading.
    7. millisecond: Integer value representing the millisecond segment of a time reading.

Date Properties:

Here is a list of each property and their description.
PropertyDescription
constructorSpecifies the function that creates an object's prototype.
prototypeThe prototype property allows you to add properties and methods to an object.

Date Methods:

Here is a list of each method and its description.
MethodDescription
Date()Returns today's date and time
getDate()Returns the day of the month for the specified date according to local time.
getDay()Returns the day of the week for the specified date according to local time.
getFullYear()Returns the year of the specified date according to local time.
getHours()Returns the hour in the specified date according to local time.
getMilliseconds()Returns the milliseconds in the specified date according to local time.
getMinutes()Returns the minutes in the specified date according to local time.
getMonth()Returns the month in the specified date according to local time.
getSeconds()Returns the seconds in the specified date according to local time.
getTime()Returns the numeric value of the specified date as the number of milliseconds since January 1, 1970, 00:00:00 UTC.
getTimezoneOffset()Returns the time-zone offset in minutes for the current locale.
getUTCDate()Returns the day (date) of the month in the specified date according to universal time.
getUTCDay()Returns the day of the week in the specified date according to universal time.
getUTCFullYear()Returns the year in the specified date according to universal time.
getUTCHours()Returns the hours in the specified date according to universal time.
getUTCMilliseconds()Returns the milliseconds in the specified date according to universal time.
getUTCMinutes()Returns the minutes in the specified date according to universal time.
getUTCMonth()Returns the month in the specified date according to universal time.
getUTCSeconds()Returns the seconds in the specified date according to universal time.
getYear()Deprecated - Returns the year in the specified date according to local time. Use getFullYear instead.
setDate()Sets the day of the month for a specified date according to local time.
setFullYear()Sets the full year for a specified date according to local time.
setHours()Sets the hours for a specified date according to local time.
setMilliseconds()Sets the milliseconds for a specified date according to local time.
setMinutes()Sets the minutes for a specified date according to local time.
setMonth()Sets the month for a specified date according to local time.
setSeconds()Sets the seconds for a specified date according to local time.
setTime()Sets the Date object to the time represented by a number of milliseconds since January 1, 1970, 00:00:00 UTC.
setUTCDate()Sets the day of the month for a specified date according to universal time.
setUTCFullYear()Sets the full year for a specified date according to universal time.
setUTCHours()Sets the hour for a specified date according to universal time.
setUTCMilliseconds()Sets the milliseconds for a specified date according to universal time.
setUTCMinutes()Sets the minutes for a specified date according to universal time.
setUTCMonth()Sets the month for a specified date according to universal time.
setUTCSeconds()Sets the seconds for a specified date according to universal time.
setYear()Deprecated - Sets the year for a specified date according to local time. Use setFullYear instead.
toDateString()Returns the "date" portion of the Date as a human-readable string.
toGMTString()Deprecated - Converts a date to a string, using the Internet GMT conventions. Use toUTCString instead.
toLocaleDateString()Returns the "date" portion of the Date as a string, using the current locale's conventions.
toLocaleFormat()Converts a date to a string, using a format string.
toLocaleString()Converts a date to a string, using the current locale's conventions.
toLocaleTimeString()Returns the "time" portion of the Date as a string, using the current locale's conventions.
toSource()Returns a string representing the source for an equivalent Date object; you can use this value to create a new object.
toString()Returns a string representing the specified Date object.
toTimeString()Returns the "time" portion of the Date as a human-readable string.
toUTCString()Converts a date to a string, using the universal time convention.
valueOf()Returns the primitive value of a Date object.

Date Static Methods:

In addition to the many instance methods listed previously, the Date object also defines two static methods. These methods are invoked through the Date( ) constructor itself:
MethodDescription
Date.parse( )Parses a string representation of a date and time and returns the internal millisecond representation of that date.
Date.UTC( )Returns the millisecond representation of the specified UTC date and time.