home resources search newsjoinmembers: 6958
PHP Flash Java Ruby Windows Linux
Hiveminds | Sat, 2006-10-21 09:12  tags:


by Sergio Pereira

Table of Contents

What is that?
Related article
The utility functions
Using the $() function

Using the $F() function
Using the $A() function
Using the $H() function

Using the $R() function
Using the Try.these() function
The Ajax object

Using the Ajax.Request class
Using the Ajax.Updater class
Enumerating... Wow! Damn! Wahoo!
Loops, Ruby-style

Your arrays on steroids
Books I strongly recommend
Reference for prototype.js
Extensions to the JavaScript classes
Extensions for the Object class

Extensions for the Number class
Extensions for the Function class
Extensions for the String class

Extensions for the Array class
Extensions for the document DOM object
Extensions for the Event object

New objects and classes defined by prototype.js
The PeriodicalExecuter object
The Prototype object
The Enumerable object

The Hash object
The ObjectRange class
The Class object

The Ajax object
The Ajax.Responders object
The Ajax.Base class

The Ajax.Request class
The options argument object
The Ajax.Updater class

The Ajax.PeriodicalUpdater class
The Element object
The Element.ClassNames class

The Abstract object
The Abstract.Insertion class
The Insertion object

The Insertion.Before class
The Insertion.Top class
The Insertion.Bottom class

The Insertion.After class
The Field object
The Form object

The Form.Element object
The Form.Element.Serializers object
The Abstract.TimedObserver class

The Form.Element.Observer class
The Form.Observer class
The Abstract.EventObserver class

The Form.Element.EventObserver class
The Form.EventObserver class
The Position object (preliminary documentation)


What is that?

In case you haven't already used it, prototype.js is a
JavaScript library written by Sam Stephenson.
This amazingly well thought and well written piece of standards-compliant code takes a lot of
the burden associated with creating rich, highly interactive web pages that characterize the Web 2.0 off your back.

If you tried to use this library recently, you probably noticed that documentation is not one
of its strongest points. As many other developers before me, I got my head around prototype.js by
reading the source code and experimenting with it. I thought it would be nice to take notes while
I learned and share with everybody else.

I'm also offering an un-official reference for the objects, classes, functions, and extensions provided by this library.

As you read the examples and the reference, developers familiar with the Ruby
programming language will notice an intentional similarity between Ruby's
built-in classes and many of the extensions implemented by this library.

toc

Related article

Advanced JavaScript guide.

toc


The utility functions

The library comes with many predefined objects and utility functions. The obvious goal of
these functions is to save you a lot of repeated typing and idioms.

toc


Using the $() function

The $() function is a handy shortcut to the all-too-frequent document.getElementById() function
of the DOM. Like the DOM function, this one returns the element that has the id passed as an argument.

Unlike the DOM function, though, this one goes further. You can pass more than one id and
$() will return an Array object with
all the requested elements. The example below should illustrate this.

<HTML>
<HEAD>
<TITLE> Test Page </TITLE>

<script src="prototype-1.4.0.js"></script>

<script>
	function test1()
	{
		var d = $('myDiv');
		alert(d.innerHTML);
	}

	function test2()
	{
		var divs = $('myDiv','myOtherDiv');
		for(i=0; i<divs.length; i++)
		{
			alert(divs[i].innerHTML);
		}
	}

</script>
</HEAD>

<BODY>
	<div id="myDiv">
		<p>This is a paragraph</p>
	</div>

	<div id="myOtherDiv">
		<p>This is another paragraph</p>
	</div>

	<input type="button" value=Test1 onclick="test1();"><br> 
	<input type="button" value=Test2 onclick="test2();"><br> 


</BODY>
</HTML>

Another nice thing about this function is that you can pass either the id string or the element object itself,
which makes this function very useful when creating other functions that can also take either form of argument.

toc


Using the $F() function

The $F() function is a another welcome shortcut. It returns the value of any field input control,
like text boxes or drop-down lists. The function can take as argument either the element id or the element object itself.

<script>
	function test3()
	{
		alert(  $F('userName')  );
	}
</script>

<input type="text" id="userName" value="Joe Doe"><br> 
<input type="button" value=Test3 onclick="test3();"><br> 
			

toc


Using the $A() function

The $A() function converts the single argument it receives
into an Array object.

This function, combined with the extensions for the Array class,
makes it easier to convert or copy any enumerable list into an
Array object. One suggested use is to convert DOM
NodeLists into regular arrays, which can be traversed
more efficiently. See example below.

<script>

	function showOptions(){
		var someNodeList = $('lstEmployees').getElementsByTagName('option');
		var nodes = $A(someNodeList);

		nodes.each(function(node){
				alert(node.nodeName + ': ' + node.innerHTML);
			});
	}
</script>

<select id="lstEmployees" size="10" >
	<option value="5">Buchanan, Steven</option>
	<option value="8">Callahan, Laura</option>

	<option value="1">Davolio, Nancy</option>
</select>

<input type="button" value="Show the options" onclick="showOptions();" > 
			

toc


Using the $H() function

The $H() function converts
objects into enumerable Hash objects that
resemble associative arrays.

<script>
	function testHash()
	{
		//let's create the object
		var a = {
			first: 10,
			second: 20,
			third: 30
			};

		//now transform it into a hash
		var h = $H(a);
		alert(h.toQueryString()); //displays: first=10&second=20&third=30
	}


</script>
			

toc


Using the $R() function

The $R() function is simply a short hand to
writing new ObjectRange(lowerBound, upperBound, excludeBounds).

Jump to the ObjectRange class documentation
for a complete explanation of this class. In the meantime, let's take a look at
a simple example that also shows the usage of iterators through the
each method. More on that method will be found
in the Enumerable object documentation.

<script>
	function demoDollar_R(){
		var range = $R(10, 20, false);
		range.each(function(value, index){
			alert(value);
		});
	}

</script>

<input type="button" value="Sample Count" onclick="demoDollar_R();" > 
			

toc


Using the Try.these() function

The Try.these() function makes it easy when you want to, ahem, try
different function calls until one of them works. It takes a number of functions as arguments
and calls them one by one, in sequence, until one of them works, returning the result of that
successful function call.

In the example below, the function xmlNode.text works in some browsers,
and xmlNode.textContent works in the other browsers. Using the
Try.these() function we can return the one that works.

<script>

function getXmlNodeValue(xmlNode){
	return Try.these(
		function() {return xmlNode.text;},
		function() {return xmlNode.textContent;}
		);
}
</script>
			

toc


The Ajax object

The utility functions mentioned above are nice but, let's face it, they are not the most advanced type of thing, now are they?
You could probably have done it yourself and you may even have similar functions in you own scripts. But those
functions are just the tip of the iceberg.

I'm sure that your interest in prototype.js is driven mostly by its
AJAX capabilities. So let's explain how the library
makes your life easier when you need to perform AJAX logic.

The Ajax object is a pre-defined object, created by the library to wrap and simplify
the tricky code that is involved when writing AJAX functionality. This object contains a number of classes
that provide encapsulated AJAX logic. Let's take a look at some of them.

toc


Using the Ajax.Request class

If you are not using any helper library, you are probably writing a whole lot of code to create a
XMLHttpRequest object and then track its progress asynchronously, then
extract the response and process it. And consider yourself lucky if you do not have to support more than one
type of browser.

To assist with AJAX functionality, the library defines the Ajax.Request
class.

Let's say you have an application that can communicate with the server via the url http://yourserver/app/get_sales?empID=1234&year=1998,
which returns an XML response like the following.

<?xml version="1.0" encoding="utf-8" ?> 
<ajax-response>
	<response type="object" id="productDetails">
		<monthly-sales>
			<employee-sales>
				<employee-id>1234</employee-id> 
				<year-month>1998-01</year-month> 
				<sales>$8,115.36</sales> 
			</employee-sales>

			<employee-sales>
				<employee-id>1234</employee-id> 
				<year-month>1998-02</year-month> 
				<sales>$11,147.51</sales> 
			</employee-sales>

		</monthly-sales>
	</response>
</ajax-response>			
			

Talking to the server to retrieve this XML is pretty simple using an
Ajax.Request object. The sample below shows
how it can be done.

<script>
	function searchSales()
	{
		var empID = $F('lstEmployees');
		var y = $F('lstYears');
		var url = 'http://yourserver/app/get_sales';
		var pars = 'empID=' + empID + '&year=' + y;
		
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: pars, 
				onComplete: showResponse
			});
		
	}

	function showResponse(originalRequest)
	{
		//put returned XML in the textarea
		$('result').value = originalRequest.responseText;
	}
</script>

<select id="lstEmployees" size="10" onchange="searchSales()">

	<option value="5">Buchanan, Steven</option>
	<option value="8">Callahan, Laura</option>
	<option value="1">Davolio, Nancy</option>
</select>

<select id="lstYears" size="3" onchange="searchSales()">
	<option selected="selected" value="1996">1996</option>
	<option value="1997">1997</option>
	<option value="1998">1998</option>

</select>
<br><textarea id=result cols=60 rows=10 ></textarea>
			

Can you see the second parameter passed to the constructor of the Ajax.Request object?
The parameter {method: 'get', parameters: pars, onComplete: showResponse}
represents an anonymous object in literal notation (a.k.a. JSON). What it means is that we are passing an object that has
a property named method that contains the string 'get', another property
named parameters that contains the querystring of the HTTP request,
and an onComplete property/method containing the function showResponse.

There are a few other properties that you can define and populate in this object, like asynchronous,
which can be true or false and determines
if the AJAX call to the server will be made asynchronously (the default value is true.)

This parameter defines the options for the AJAX call. In our sample, we are calling the url in the first argument via
a HTTP GET command, passing the querystring contained in the variable pars, and the
Ajax.Request object will call the showResponse function when it finishes
retrieving the response.

As you may know, the XMLHttpRequest reports progress during the HTTP call. This progress
can inform four different stages: Loading, Loaded, Interactive, or Complete. You
can make the Ajax.Request object call a custom function in any of these stages, the Complete

being the most common one. To inform the function to the object, simply provide property/methods named
onXXXXX in the request options, just like the onComplete
from our example. The function you pass in will be called by the object with two arguments,
the first one will be the XMLHttpRequest (a.k.a. XHR) object itself,
the second one will be the evaluated X-JSON response HTTP header (if one is present).
You can then use the XHR to get the returned data and maybe check the
status property, which will contain the HTTP result
code of the call. The X-JSON header is useful if you want to return some script or
JSON-formatted data.

Two other interesting options can be used to process the results. We can specify the
onSuccess option as a function to be called when the AJAX call executes without errors
and, conversily, the onFailure option can be a function to be called when a server error
happens. Just like the onXXXXX option functions, these two will also be called passing the XHR that carried the AJAX call and the evaluated X-JSON header.

Our sample did not process the XML response in any interesting way. We just dumped the XML in the textarea. A typical
usage of the response would probably find the desired information inside the XML and update some page elements, or maybe
even some sort of XSLT transformation to produce HTML in the page.

In version 1.4.0, a new form of event callback handling is introduced. If you have
code that should always be executed for a particular event, regardless of which
AJAX call caused it to happen, then you can use the new
Ajax.Responders object.

Let's suppose you want to show some visual indication that an AJAX call is in progress,
like a spinning icon or something of that nature. You can use two global event handlers
to help you, one to show the icon when the first call starts and another one to hide
the icon when the last one finishes. See example below.

<script>
	var myGlobalHandlers = {
		onCreate: function(){
			Element.show('systemWorking');
		},

		onComplete: function() {
			if(Ajax.activeRequestCount == 0){
				Element.hide('systemWorking');
			}
		}
	};

	Ajax.Responders.register(myGlobalHandlers);

</script>

<div id='systemWorking'><img src='spinner.gif'>Loading...</div>
	

For more complete explanations, see the Ajax.Request reference and the options reference.

toc


Using the Ajax.Updater class

If you have a server endpoint that can return information already formatted in HTML, the library makes life even
easier for you with the Ajax.Updater class. With it you just inform which element should
be filled with the HTML returned from the AJAX call. An example speaks better than I can write.

<script>
	function getHTML()
	{
		var url = 'http://yourserver/app/getSomeHTML';
		var pars = 'someParameter=ABC';
		
		var myAjax = new Ajax.Updater(
			'placeholder', 
			url, 
			{
				method: 'get', 
				parameters: pars
			});
		
	}
</script>

<input type=button value=GetHtml onclick="getHTML()">

<div id="placeholder"></div>
			

As you can see, the code is very similar to the previous example, with the exclusion of the onComplete
function and the element id being passed in the constructor. Let's change the code a little bit to illustrate
how it is possible to handle server errors on the client.

We will add more options to the call, specifying a function to capture error conditions. This is done
using the onFailure option. We will also
specify that the placeholder only gets populated in case of a successful operation.
To achieve this we will change the first parameter from a simple element id to an object with two properties,
success (to be used when everything goes OK) and failure
(to be used when things go bad.) We will not be using the failure property
in our example, just the reportError function in the onFailure option.

<script>
	function getHTML()
	{
		var url = 'http://yourserver/app/getSomeHTML';
		var pars = 'someParameter=ABC';
		
		var myAjax = new Ajax.Updater(
					{success: 'placeholder'}, 
					url, 
					{
						method: 'get', 
						parameters: pars, 
						onFailure: reportError
					});
		
	}

	function reportError(request)
	{
		alert('Sorry. There was an error.');
	}
</script>

<input type=button value=GetHtml onclick="getHTML()">
<div id="placeholder"></div>

			

If your server logic returns JavaScript code along with HTML markup, the Ajax.Updater
object can evaluate that JavaScript code. To get the object to treat the response as JavaScript, you simply add
evalScripts: true; to the list of properties in the last argument of the object constructor. But there's a caveat. Those script blocks will not be added to the
page's script. As the option name evalScripts suggests, the scripts
will be evaluated. What's the difference, you may ask? Lets assume
the requested URL returns something like this:

<script language="javascript" type="text/javascript">
	function sayHi(){
		alert('Hi');
	}
</script>

<input type=button value="Click Me" onclick="sayHi()">
			

In case you've tried it before, you know it doesn't work. The reason is that the
script block will be evaluated, and evaluating a script like the above will not
create a function named sayHi. It will do nothing.
To create this function we need
to change our script to create the function. See below.

<script language="javascript" type="text/javascript">
	sayHi = function(){
		alert('Hi');
	};
</script>

<input type=button value="Click Me" onclick="sayHi()">
			

Note that in the previous example we did not use the var

keyword to declare the variable. Doing so would have created a function object that
would be local to the script block (at least in IE). Without the var
keyword the function object is scoped to the window, which is our intent.

For more complete explanations, see the Ajax.Updater reference and the options reference.

toc


Enumerating... Wow! Damn! Wahoo!

We are all familar with for loops. You know, create yourself an array, populate it with
elements of the same kind, create a loop control structure (for, foreach, while, repeat, etc,)
access each element sequentially, by its numeric index, and do something with the element.

When you come to think about it, almost every time you have an array in your code it
means that you'll be using that array in a loop sooner or later. Wouldn't it be nice
if the array objects had more functionality to deal with these iterations? Yes, it would,
and many programming languages provide such functionality in their arrays or equivalent
structures (like collections and lists.)

Well, it turns out that prototype.js gives us the Enumerable
object, which implements a plethora of tricks for us to use when dealing with iterable data.
The prototype.js library goes one step further and extends the
Array class
with all the methods of Enumerable.

toc

Loops, Ruby-style

In standard javascript, if you wanted to sequentially display the elements of an array,
you could very well write something like this.

<script>
	function showList(){
		var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];

		for(i=0;i<simpsons.length;i++){
			alert(simpsons[i]);
		}
	}

</script>

<input type="button" value="Show List" onclick="showList();" > 
			

With our new best friend, prototype.js, we can rewrite this loop like this.

	function showList(){
		var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];
		simpsons.each( function(familyMember){
			alert(familyMember);
		});
	}
			

You are probably thinking "big freaking deal...just a weird syntax for the same old thing."
Well, in the above example, yes, there's nothing too earth shattering going on. Afterall,
there's not much to be changed in such a drop-dead-simple example. But
keep reading, nonetheless.

Before we move on. Do you see this function that is being passed as an argument
to the each method? Let's start referring to it as an
iterator function.

toc

Your arrays on steroids

Like we mentioned above, it's very common for all the elements in your array to be of
the same kind, with the same properties and methods. Let's see how we can take advantage
of iterator functions with our new souped-up arrays.

Finding an element according to a criteria.

<script>
	function findEmployeeById(emp_id){
		var listBox = $('lstEmployees')
		var options = listBox.getElementsByTagName('option');
		options = $A(options);
		var opt = options.find( function(employee){
			return (employee.value == emp_id);
		});
		alert(opt.innerHTML); //displays the employee name
	}

</script>

<select id="lstEmployees" size="10" >
	<option value="5">Buchanan, Steven</option>
	<option value="8">Callahan, Laura</option>
	<option value="1">Davolio, Nancy</option>

</select>

<input type="button" value="Find Laura" onclick="findEmployeeById(8);" > 
			

Now let's kick it up another notch. See how we can filter out
items in arrays, then retrieve just a desired member from each
element.

<script>
	function showLocalLinks(paragraph){
		paragraph = $(paragraph);
		var links = $A(paragraph.getElementsByTagName('a'));
		//find links that do not start with 'http'
		var localLinks = links.findAll( function(link){
			var start = link.href.substring(0,4);
			return start !='http';
		});
		//now the link texts
		var texts = localLinks.pluck('innerHTML');
		//get them in a single string
		var result = texts.inspect();
		alert(result);
	}


</script>
<p id="someText">
	This <a href="http://othersite.com/page.html">text</a> has 
	a <a href="#localAnchor">lot</a> of 
	<a href="#otherAnchor">links</a>. Some are 
	<a href="http://wherever.com/page.html">external</a>

	and some are <a href="#someAnchor">local</a>
</p>
<input type=button value="Find Local Links" onclick="showLocalLinks('someText')">
			

It takes just a little bit of practice to get completely addicted to this syntax.
Take a look at the Enumerable

and Array references for all the available functions.

toc


Books I strongly recommend

Some books are just too good not to pass the word forward. The following books have
helped me a lot learning the new skills required to adequately create AJAX applications
and also consolidate the skills I though I already mastered. I think a good book is
money well-spent, that keep paying for itself for a long time.

toc

Reference for prototype.js


Extensions to the JavaScript classes

One of the ways the prototype.js library adds functionality is by extending the
existing JavaScript classes.

toc


Extensions for the Object class

MethodKindArgumentsDescription
extend(destination, source)staticdestination: any object, source: any object Provides a way to implement inheritance by
copying all properties and methods from source to destination.
inspect(targetObj)statictargetObj: any object Returns a human-readable string
representation of targetObj. It defaults to the return value of
toString if the given object does not
define an inspect instance method.

toc


Extensions for the Number class

MethodKindArgumentsDescription
toColorPart()instance(none) Returns the hexadecimal representation of the number.
Useful when converting the RGB components of a color into its HTML representation.
succ()instance(none) Returns the next number. This function is used in
scenarios that involve iteration.
times(iterator)instanceiterator: a function object conforming to Function(index) Calls the iterator function
repeatedly passing the current index in the index argument.

The following sample will display alert message boxes from 0 to 9.

<script>
	function demoTimes(){
		var n = 10;
		n.times(function(index){
			alert(index);
		});
		/***************************
		 * you could have also used: 
		 *           (10).times( .... ); 
		 ***************************/
	}

</script>

<input type=button value="Test Number.times()" onclick="demoTimes()">
			

toc


Extensions for the Function class

MethodKindArgumentsDescription
bind(object)instanceobject: the object that owns the method Returns an instance of the function pre-bound to the function(=method)
owner object. The returned function will have the same arguments as the original one.
bindAsEventListener(object)instanceobject: the object that owns the method Returns an instance of the function pre-bound to the function(=method)
owner object.The returned function will have the current event object
as its argument.

Let's see one of these extensions in action.

<input type=checkbox id=myChk value=1> Test?
<script>

	//declaring the class
	var CheckboxWatcher = Class.create();

	//defining the rest of the class implementation
	CheckboxWatcher.prototype = {

	   initialize: function(chkBox, message) {
			this.chkBox = $(chkBox);
			this.message = message;
			//assigning our method to the event
			
			this.chkBox.onclick = 
			   this.showMessage.bindAsEventListener(this);
			
	   },

	   showMessage: function(evt) {
		  alert(this.message + ' (' + evt.type + ')');
	   }
	};


	var watcher = new CheckboxWatcher('myChk', 'Changed');
</script>

			

toc


Extensions for the String class

MethodKindArgumentsDescription
stripTags()instance(none) Returns the string with any HTML or XML tags removed
stripScripts()instance(none) Returns the string with any
<script />
blocks removed
escapeHTML()instance(none) Returns the string with any HTML markup characters properly escaped
unescapeHTML()instance(none) The reverse of escapeHTML()
extractScripts()instance(none) Returns an Array
object containing all the <script /> blocks found
in the string.
evalScripts()instance(none) Evaluates each <script />
block found in the string.
toQueryParams()instance(none) Splits a querystring into an
associative Array indexed by parameter name
(more like a hash).
parseQuery()instance(none) Same as toQueryParams().
toArray()instance(none) Splits the string into an
Array of its characters.
camelize()instance(none) Converts a hyphen-delimited-string
into a camelCaseString. This function is useful when writing
code that deals with style properties, for example.

toc


Extensions for the Array class

To start off, Array extends Enumerable,
so all the handy methods defined in the Enumerable object are available.
Besides that, the methods listed below are also implemented.

MethodKindArgumentsDescription
clear()instance(none) Empties the array and returns itself.
compact()instance(none) Returns the array without the elements
that are null or undefined.
This method does ot change the array itself
first()instance(none) Returns the first element of the array.
flatten()instance(none) Returns a flat, one-dimensional
version of the array. This flattening happens by finding
each of the array's elements that are also arrays and
including their elements in the returned array,
recursively.
indexOf(value)instance value: what you are looking for. Returns the zero-based position of the given value
if it is found in the array. Returns -1 if
value is not found.
inspect()instance(none) Overriden to return a
nicely formatted string representation of the array
with its elements.
last()instance(none) Returns the last element of the array.
reverse([applyToSelf])instance applyToSelf: indicates if the array itself should also be reversed. Returns the array in reverse sequence. If no argument is given or
if the argument is true the array itself
will also be reversed. Otherwise it remains unchanged.
shift()instance(none) Returns the first element
and removes it from the array, reducing the array's length by 1.
without(value1 [, value2 [, .. valueN]])instance value1 ... valueN: values to be excluded if present in the array. Returns the array excluding the elements that are included in
the list of arguments.

toc


Extensions for the document DOM object

MethodKindArgumentsDescription
getElementsByClassName(className [, parentElement])instance className: name of a CSS class associated with the elements,
parentElement: object or id of the element that contains the
elements being retrieved.
Returns all the elements that are associated with the given CSS class name. If no
parentElement id given, the entire document body will be
searched.

toc


Extensions for the Event object

PropertyTypeDescription
KEY_BACKSPACENumber 8: Constant. Code for the Backspace key.
KEY_TABNumber 9: Constant. Code for the Tab key.
KEY_RETURNNumber 13: Constant. Code for the Return key.
KEY_ESCNumber 27: Constant. Code for the Esc key.
KEY_LEFTNumber 37: Constant. Code for the Left arrow key.
KEY_UPNumber 38: Constant. Code for the Up arrow key.
KEY_RIGHTNumber 39: Constant. Code for the Right arrow key.
KEY_DOWNNumber 40: Constant. Code for the Down arrow key.
KEY_DELETENumber 46: Constant. Code for the Delete key.
observers:Array List of cached observers. Part of the internal implementation
details of the object.

MethodKindArgumentsDescription
element(event)static event: an Event object Returns element that originated the event.
isLeftClick(event)static event: an Event object Returns true if the left mouse button was clicked.
pointerX(event)static event: an Event object Returns the x coordinate of the mouse pointer on the page.
pointerY(event)static event: an Event object Returns the y coordinate of the mouse pointer on the page.
stop(event)static event: an Event object Use this function to abort the default behavior
of an event and to suspend its propagation.
findElement(event, tagName)static event: an Event object, tagName: name of the desired tag. Traverses the DOM tree upwards, searching for the
first element with the given tag name, starting from the element that
originated the event.
observe(element, name, observer, useCapture)static element: object or id, name: event name (like 'click', 'load', etc), observer: function
to handle the event, useCapture: if true, handles the event in the capture
phase and if false in the bubbling phase.
Adds an event handler function to an event.
stopObserving(element, name, observer, useCapture)static element: object or id, name: event name (like 'click'), observer: function
that is handling the event, useCapture: if true handles the event in the capture
phase and if false in the bubbling phase.
Removes an event handler from the event.
_observeAndCache(element, name, observer, useCapture)static   Private method, do not worry about it.
unloadCache()static (none) Private method, do not worry about it.
Clears all cached observers from memory.

Let's see how to use this object to add an event handler to the load event
of the window object.

<script>
	Event.observe(window, 'load', showMessage, false);

	function showMessage() {
	  alert('Page loaded.');
	}

</script>			
			

toc


New objects and classes defined by prototype.js

Another way the library helps you is by providing many objects that implement both
support for object oriented designs and common functionality in general.

toc


The PeriodicalExecuter object

This object provides the logic for
calling a given function repeatedly, at a given interval.

MethodKindArgumentsDescription
[ctor](callback, interval)constructorcallback: a parameterless function, interval: number of seconds Creates one instance of this object that will call the function repeatedly.
PropertyTypeDescription
callbackFunction()The function to be called.
No parameters will be passed to it.
frequencyNumberThis is actually the interval in seconds
currentlyExecutingBooleanIndicates if the function call is in progress

toc


The Prototype object

The Prototype object does not have any important role, other
than declaring the version of the library being used.

PropertyTypeDescription
VersionStringThe version of the library
emptyFunctionFunction()An empty function object
KFunction(obj)A function object that just echoes back the given parameter.
ScriptFragmentString A regular expression to identify scripts

toc


The Enumerable object

The Enumerable object allows
one to write more elegant code to
iterate items in a list-like structure.

Many other objects extend the Enumerable
object to leverage its useful interface.

MethodKindArgumentsDescription
each(iterator)instance iterator: a function object conforming to Function(value, index) Calls the given iterator function passing
each element in the list in the first argument and the index of
the element in the second argument
all([iterator])instance iterator: a function object conforming to Function(value, index) This function is a way to test the entire collection of values
using a given function. all will return
false if the iterator function returns
false or null
for any of the elements. It will
return true otherwise.
If no iterator is given, then the test will be if the element
itself is different than false
or null. You can simply read it as
"check if all elements are not-false."
any(iterator)instance iterator: a function object conforming to Function(value, index), optional. This function is a way to test the entire collection of values
using a given function. any will return
true if the iterator function does not
return false or null
for any of the elements. It will
return false otherwise.
If no iterator is given, then the test will be if the element
itself is different than false
or null.You can simply read it as
"check if any element is not-false."
collect(iterator)instance iterator: a function object conforming to Function(value, index) Calls the iterator function for each
element in the collection and returns each result
in an Array, one result element for each element
in the collection, in the same sequence.
detect(iterator)instance iterator: a function object conforming to Function(value, index) Calls the iterator function for each
element in the collection and returns the first element
that caused the iterator function to return true
(or, more precisely, not-false.) If no element returns
true, then detect returns null.
entries()instance (none) Same as toArray().
find(iterator)instance iterator: a function object conforming to Function(value, index) Same as detect().
findAll(iterator)instance iterator: a function object conforming to Function(value, index) Calls the iterator function for each
element in the collection and returns an
Array with all the elements
that caused the iterator function to return a value
that resolves to true.
This function is the opposite of reject().
grep(pattern [, iterator])instance pattern: a RegExp object used to match the elements, iterator: a function object conforming to Function(value, index) Tests the string value of each element
in the collection against the pattern regular expression . The function will return an Array
containing all the elements that matched the regular
expression. If the iterator function is given, then
the Array will contain the
result of calling the iterator with each element that was a match.
include(obj)instance obj: any object Tries to find the given object in the collection.
Returns true if the object is
found, false otherwise.
inject(initialValue, iterator)instance initialValue: any object to be used as the initial value,
iterator: a function object conforming to Function(accumulator, value, index)
Combines all the elements of the collection using the
iterator function. The iterator is called passing
the result of the previous iteration in the accumulator
argument. The first iteration gets initialValue
in the accumulator argument.
The last result is the final return value.
invoke(methodName [, arg1 [, arg2 [...]]])instance methodName: name of the method that will be called in each element,
arg1..argN: arguments that will be passed in the method invocation.
Calls the method specified by methodName in each element of
the collection, passing any given arguments (arg1 to argN), and returns the results in an Array object.
map(iterator)instance iterator: a function object conforming to Function(value, index) Same as collect().
max([iterator])instance iterator: a function object conforming to Function(value, index) Returns the element with the greatest value in the collection or
the greatest result of calling the iterator for each
element in the collection, if an iterator is given.
member(obj)instance obj: any object Same as include().
min([iterator])instance iterator: a function object conforming to Function(value, index) Returns the element with the lowest value in the collection or
the lowest result of calling the iterator for each
element in the collection, if an iterator is given.
partition([iterator])instance iterator: a function object conforming to Function(value, index) Returns an Array containing
two other arrays. The first array will contain all the elements
that caused the iterator function to return
true and the
second array will contain the remaining elements.
If the iterator is not given, then the first array will contain
the elements that resolve to true
and the other array will contain the remaining elements.
pluck(propertyName)instance propertyName name of the property that will be read from each element. This can also contain the index of the element Retrieves the value to the property specified by propertyName in each element of the collection and returns the results in
an Array object.
reject(iterator)instance iterator: a function object conforming to Function(value, index) Calls the iterator function for each
element in the collection and returns an
Array with all the elements
that caused the iterator function to return a
value that resolves to false.
This function is the opposite of findAll().
select(iterator)instance iterator: a function object conforming to Function(value, index) Same as findAll().
sortBy(iterator)instance iterator: a function object conforming to Function(value, index) Returns an Array with all the elements
sorted according to the result the iterator function call.
toArray()instance (none) Returns an Array with all the elements
of the collection.
zip(collection1[, collection2 [, ... collectionN [,transform]]])instance collection1 .. collectionN: enumerations that will be merged, transform: a function object conforming to Function(value, index) Merges each given collection with the current collection. The merge operation returns a new array with the same number of elements as the
current collection and each element is an array (let's call
them sub-arrays) of the elements with
the same index from each of the merged collections. If the transform
function is given, then each sub-array will be transformed by this
function before being returned.
Quick example: [1,2,3].zip([4,5,6], [7,8,9]).inspect() returns "[ [1,4,7],[2,5,8],[3,6,9] ]"

toc


The Hash object

The Hash object implements a
hash structure, i.e. a collection of Key:Value pairs.

Each item in a Hash object is
an array with two elements: first the key then the value. Each
item also has two properties: key and
value, which are pretty
self-explanatory.

MethodKindArgumentsDescription
keys()instance (none) Returns an Array with the
keys of all items.
values()instance (none) Returns an Array with the
values of all items.
merge(otherHash)instance otherHash: Hash object Combines the hash with the other hash passed in and
returns the new resulting hash.
toQueryString()instance (none) Returns all the items of the hash in a string
formatted like a query string, e.g.
'key1=value1&key2=value2&key3=value3'
inspect()instance(none) Overriden to return a
nicely formatted string representation of the hash
with its key:value pairs.

toc


The ObjectRange class

Inherits from Enumerable

Represents a range of values, with upper and lower bounds.

PropertyTypeKindDescription
start(any)instance The lower bound of the range
end(any)instance The upper bound of the range
exclusiveBooleaninstance Determines if the boundaries themselves
are part of the range.

MethodKindArgumentsDescription
[ctor](start, end, exclusive)constructorstart: the lower bound, end: the upper bound, exclusive: include the bounds in the range? Creates one range object, spanning from
start to end.
It is important to note that start and
end have to be objects of the same type and
they must have a succ() method.
include(searchedValue)instance searchedValue: value that we are looking for Checks if the given value is part of the range. Returns
true or false.

toc


The Class object

The Class object is used when declaring the other
classes in the library. Using this object when declaring a class causes the
to new class to support an initialize() method, which
serves as the constructor.

See the sample below.

//declaring the class

var MySampleClass = Class.create();

//defining the rest of the class implmentation
MySampleClass.prototype = {

   initialize: function(message) {
		this.message = message;
   },

   showMessage: function(ajaxResponse) {
      alert(this.message);
   }
};	

//now, let's instantiate and use one object
var myTalker = new MySampleClass('hi there.');
myTalker.showMessage(); //displays alert

			

MethodKindArgumentsDescription
create(*)instance(any) Defines a constructor for a new class

toc


The Ajax object

This object serves as the root and namespace for many other
classes that provide AJAX functionality.

PropertyTypeKindDescription
activeRequestCountNumberinstance The number of AJAX requests in progress.
MethodKindArgumentsDescription
getTransport()instance(none) Returns a new XMLHttpRequest object

toc


The Ajax.Responders object

Inherits from Enumerable

This object maintains a list of objects that will be called when
Ajax-related events occur. You can use this object, for example, if you want
to hook up a global exception handler for AJAX operations.

PropertyTypeKindDescription
respondersArrayinstance The list of objects registered
for AJAX events notifications.

MethodKindArgumentsDescription
register(responderToAdd)instanceresponderToAdd:
object with methods that will be called.
The object passed in the responderToAdd
argument should contain methods named like the AJAX events (e.g.
onCreate, onComplete,
onException, etc.) When the corresponding event
occurs all the registered objects that contain a method with the
appropriate name will have that method called.
unregister(responderToRemove)instanceresponderToRemove:
object to be removed from the list.
The object passed in the responderToRemove
argument will be removed from the list of registered objects.
dispatch(callback, request, transport, json)instance callback: name of the AJAX event being reported, request: the Ajax.Request
object responsible for the event, transport: the XMLHttpRequest object that
carried (or is carrying) the AJAX call, json: the X-JSON header of the
response (if present)
Runs through the list of registered objects looking for the ones
that have the method determined in the callback
argument. Then each of these methods is called passing the other 3
arguments. If the AJAX response contains a X-JSON
HTTP header with some JSON content, then it will be evaluated and passed in the
json argument. If the event is onException, the transport argument will have the exception instead and
json will not be passed.

toc


The Ajax.Base class

This class is used as the base class for most of the other classes defined in the
Ajax object.

MethodKindArgumentsDescription
setOptions(options)instanceoptions: AJAX options Sets the desired options for the AJAX operation
responseIsSuccess()instance(none) Returns true if the AJAX operation succeeded, false otherwise
responseIsFailure()instance(none) The opposite of responseIsSuccess().

toc


The Ajax.Request class

Inherits from Ajax.Base

Encapsulates AJAX operations

PropertyTypeKindDescription
EventsArraystatic List of possible events/statuses reported during an AJAX operation.
The list contains: 'Uninitialized', 'Loading', 'Loaded', 'Interactive', and 'Complete.'
transportXMLHttpRequestinstance The XMLHttpRequest object that
carries the AJAX operation
urlStringinstance The URL targeted by the request.

MethodKindArgumentsDescription
[ctor](url, options)constructorurl: the url to be fetched,
options: AJAX options
Creates one instance of this object that will call the given
url using the given options.
The onCreate event will be raised during the constructor call.
Important:

It is worth noting that the chosen url is subject to the browser's security settings. In many
cases the browser will not fetch the url if it is not from the same host (domain) as
the current page. You should ideally use only local urls to avoid having to
configure or restrict the user's browser. (Thanks Clay).

evalJSON()instance(none) This method is typically not called externally. It is
called internally to evaluate the content of an eventual
X-JSON HTTP header
present in the AJAX response.
evalResponse()instance(none) This method is typically not called externally. If the
AJAX response has a Content-type header of
text/javascript then
the response body will be evaluated and this method will be used.
header(name)instancename: HTTP header name Retrieves the contents of any HTTP header of the AJAX response.
Call this only after the AJAX call is completed.
onStateChange()instance(none) This method is typically not called externally. It is
called by the object itself when the AJAX call status changes.
request(url)instanceurl: url for the AJAX call This method is typically not called externally. It is
already called during the constructor call.
respondToReadyState(readyState)instancereadyState: state number (1 to 4) This method is typically not called externally. It is
called by the object itself when the AJAX call status changes.
setRequestHeaders()instance(none) This method is typically not called externally. It is
called by the object itself to assemble the HTTP header that will
be sent during the HTTP request.

toc


The options argument object

An important part of the AJAX operations is the options argument.
There's no options class per se. Any object can be passed, as long as it
has the expected properties. It is common to create anonymous objects just for the AJAX calls.

PropertyTypeDefaultDescription
methodString'post' Method of the HTTP request
parametersString'' The url-formatted list of values passed to the request
asynchronousBooleantrue Indicates if the AJAX call will be made asynchronously
postBodyStringundefined Content passed to in the request's body in case of a HTTP POST
requestHeadersArrayundefined List of HTTP headers to be passed with the request. This list must have an even
number of items, any odd item is the name of a custom header, and the following even item is the
string value of that header. Example:['my-header1', 'this is the value', 'my-other-header', 'another value']
onXXXXXXXXFunction(XMLHttpRequest, Object)undefined Custom function to be called when the respective event/status is reached
during the AJAX call. Example var myOpts = {onComplete: showResponse, onLoaded: registerLoaded};.
The function used will receive one argument, containing the XMLHttpRequest object that
is carrying the AJAX operation and another argument containing the evaluated X-JSON response HTTP header.
onSuccessFunction(XMLHttpRequest, Object)undefined Custom function to be called when the AJAX call completes successfully.
The function used will receive one argument, containing the XMLHttpRequest object that
is carrying the AJAX operation and another argument containing the evaluated X-JSON response HTTP header.
onFailureFunction(XMLHttpRequest, Object)undefined Custom function to be called when the AJAX call completes with error.
The function used will receive one argument, containing the XMLHttpRequest object that
is carrying the AJAX operation and another argument containing the evaluated X-JSON response HTTP header.
onExceptionFunction(Ajax.Request, exception)undefined Custom function to be called when an exceptional condition
happens on the client side of the AJAX call, like an invalid response or invalid arguments.
The function used will receive two arguments, containing the Ajax.Request
object that wraps the AJAX operation and the exception object.
insertionan Insertion classundefined A class that will determine how the new content will be inserted.
It can be Insertion.Before,
Insertion.Top,
Insertion.Bottom,
or Insertion.After.
Applies only to Ajax.Updater objects.
evalScriptsBooleanundefined, false Determines if script blocks will be evaluated when the
response arrives. Applies only to Ajax.Updater objects.
decayNumberundefined, 1 Determines the progressive slowdown in a
Ajax.PeriodicalUpdater object refresh rate when
the received response is the same as the last one. For example, if
you use 2, after one of the refreshes produces the same result as the
previous one, the object will wait twice as much time for the next refresh.
If it repeats again, the object will wait four times as much, and so on. Leave
it undefined or use 1 to avoid the slowdown.
frequencyNumberundefined, 2 Interval (not frequency) between refreshes, in seconds.
Applies only to Ajax.PeriodicalUpdater objects.

toc


The Ajax.Updater class

Inherits from Ajax.Request

Used when the requested url returns HTML that you want to
inject directly in a specific element of your page. You can
also use this object when the url returns <script> blocks
that will be evaluated upon arrival. Use the evalScripts option
to work with scripts.

PropertyTypeKindDescription
containersObjectinstance This object contains two properties:
containers.success will be used when the AJAX call
succeeds, and containers.failure will be used otherwise.

MethodKindArgumentsDescription
[ctor](container, url, options)constructor container:this can be the id of an element, the element object itself,
or an object with two properties - object.success element (or id) that
will be used when the AJAX call succeeds, and object.failure element
(or id) that will be used otherwise.
url: the url to be fetched, options: AJAX options
Creates one instance of this object that will call the given
url using the given options.
updateContent()instance(none) This method is typically not called externally. It is
called by the object itself when the response is received. It will
update the appropriate element with the HTML or call the function passed in the
insertion option. The function will be called with two arguments,
the element to be updated and the response text.

toc

The Ajax.PeriodicalUpdater class

Inherits from Ajax.Base

This class repeatedly instantiates and uses an Ajax.Updater
object to refresh an element on the page, or to perform any of the other tasks the
Ajax.Updater can perform. Check the
Ajax.Updater reference for more information.

PropertyTypeKindDescription
containerObjectinstance This value will be passed straight to the
Ajax.Updater's constructor.
urlStringinstance This value will be passed straight to the
Ajax.Updater's constructor.
frequencyNumberinstance Interval (not frequency) between refreshes, in seconds.
Defaults to 2 seconds. This number will be multiplied by the current
decay when invoking theAjax.Updater object
decayNumberinstance Keeps the current decay level applied when re-executing the task
updaterAjax.Updaterinstance The most recently used Ajax.Updater object
timerObjectinstance The JavaScript timer being used to notify the object
when it is time for the next refresh.

MethodKindArgumentsDescription
[ctor](container, url, options)constructor container:this can be the id of an element, the element object itself,
or an object with two properties - object.success element (or id) that
will be used when the AJAX call succeeds, and object.failure element
(or id) that will be used otherwise.
url: the url to be fetched, options: AJAX options
Creates one instance of this object that will call the given
url using the given options.
start()instance(none) This method is typically not called externally. It is
called by the object itself to start performing its periodical tasks.
stop()instance(none) Causes the object to stop performing its periodical tasks.
After stopping, the object will call the callback given in the
onComplete option (if any.)
updateComplete()instance(none) This method is typically not called externally. It is
called by the currently used Ajax.Updater after it
completes the request. It is used to schedule the next refresh.
onTimerEvent()instance(none) This method is typically not called externally. It is
called internally when it is time for the next update.

toc


The Element object

This object provides some utility functions for manipulating elements in the DOM.

MethodKindArgumentsDescription
addClassName(element, className)instanceelement: element object or id,
className: name of a CSS class
Adds the given class name to the element's class names.
classNames(element)instanceelement: element object or id Returns an Element.ClassNames
object representing the CSS class names associated with the given element.
cleanWhitespace(element)instanceelement: element object or id Removes any white space text node children of the element
empty(element)instanceelement: element object or id Returns a Boolean value
indicating if the element tag is empty (or has only whitespaces)
getDimensions(element)instanceelement: element object or id

Returns the dimensions of the element. The returned value is an object with
two properties: height and width.

getHeight(element)instanceelement: element object or id Returns the offsetHeight of the element
getStyle(element, cssProperty)instanceelement: element object or id,
cssProperty name of a CSS property (either format 'prop-name' or 'propName' works).

Returns the value of the CSS property in the given element or null if not present.

hasClassName(element, className)instanceelement: element object or id,
className: name of a CSS class
Returns true if the element has the given class name as one
of its class names.
hide(elem1 [, elem2 [, elem3 [...]]])instanceelemN: element object or id Hides each element by setting its style.display
to 'none'.
makeClipping(element)instanceelement: element object or id
makePositioned(element)instanceelement: element object or id Changes the element's style.position
to 'relative'
remove(element)instanceelement: element object or id Removes the element from the document.
removeClassName(element, className)instanceelement: element object or id,
className: name of a CSS class
Removes the given class name from the element's class names.
scrollTo(element)instanceelement: element object or id Scrolls the window to the element position.
setStyle(element, cssPropertyHash)instanceelement: element object or id,
cssPropertyHash Hash object with the styles to be applied.
Sets the value of the CSS properties in the given element,
according to the values in the cssPropertyHash argument.
show(elem1 [, elem2 [, elem3 [...]]])instanceelemN: element object or id Shows each element by resetting its style.display
to ''.
toggle(elem1 [, elem2 [, elem3 [...]]])instanceelemN: element object or id Toggles the visibility of each passed element.
undoClipping(element)instanceelement: element object or id
undoPositioned(element)instanceelement: element object or id Clears the element's style.position
to ''
update(element, html)instanceelement: element object or id, html: html content Replaces the inner html of the element with the given html argument. If
the given html contains <script> blocks
they will not be included but they will be evaluated.
visible(element)instanceelement: element object or id Returns a Boolean
value indicating if the element is visible.

toc


The Element.ClassNames class

Inherits from Enumerable

Represents the collection of CSS class names associated with an element.

MethodKindArgumentsDescription
[ctor](element)constructorelement: any DOM element object or id Creates an Element.ClassNames
object representing the CSS class names of the given element.
add(className)instance className: a CSS class name Includes the given CSS class name in the list of class names
associated with the element.
remove(className)instance className: a CSS class name Removes the given CSS class name from the list of class names
associated with the element.
set(className)instance className: a CSS class name Associates the element with the given CSS class name, removing any other
class names from the element.

toc


The Abstract object

This object serves as the root for other classes in the library. It does not have any
properties or methods. The classes defined in this object are also treated as
traditional abstract classes.

toc


The Abstract.Insertion class

This class is used as the base class for the other classes that will provide
dynamic content insertion. This class is used like an abstract class.

MethodKindArgumentsDescription
[ctor](element, content)constructor element: element object or id, content: HTML to be inserted Creates an object that will help with dynamic content insertion.
contentFromAnonymousTable()instance (none)
PropertyTypeKindDescription
adjacencyStringstatic, parameter Parameter that specifies where the content will be
placed relative to the given element. The possible values are: 'beforeBegin',
'afterBegin', 'beforeEnd', and
'afterEnd'.
elementObjectinstance The element object that the insertion will be made relative to.
contentStringinstance The HTML that will be inserted.

toc


The Insertion object

This object serves as the root for other classes in the library. It does not have any
properties or methods. The classes defined in this object are also treated as
traditional abstract classes.

toc


The Insertion.Before class

Inherits from Abstract.Insertion

Inserts HTML before an element.

MethodKindArgumentsDescription
[ctor](element, content)constructor element: element object or id, content: HTML to be inserted Inherited from Abstract.Insertion.
Creates an object that will help with dynamic content insertion.

The following code

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.Before('person', 'Chief '); </script>
			

Will change the HTML to

<br>Hello, Chief <span id="person" style="color:red;">Wiggum. How's it going?</span>	
			

toc


The Insertion.Top class

Inherits from Abstract.Insertion

Inserts HTML as the first child under an element. The content will be right after the opening
tag of the element.

MethodKindArgumentsDescription
[ctor](element, content)constructor element: element object or id, content: HTML to be inserted Inherited from Abstract.Insertion.
Creates an object that will help with dynamic content insertion.

The following code

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.Top('person', 'Mr. '); </script>

			

Will change the HTML to

<br>Hello, <span id="person" style="color:red;">Mr. Wiggum. How's it going?</span>	
			

toc


The Insertion.Bottom class

Inherits from Abstract.Insertion

Inserts HTML as the last child under an element. The content will be right before the element's
closing tag.

MethodKindArgumentsDescription
[ctor](element, content)constructor element: element object or id, content: HTML to be inserted Inherited from Abstract.Insertion.
Creates an object that will help with dynamic content insertion.

The following code

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.Bottom('person', " What's up?"); </script>
			

Will change the HTML to

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going? What's up?</span>	
			

toc


The Insertion.After class

Inherits from Abstract.Insertion

Inserts HTML right after the element's closing tag.

MethodKindArgumentsDescription
[ctor](element, content)constructor element: element object or id, content: HTML to be inserted Inherited from Abstract.Insertion.
Creates an object that will help with dynamic content insertion.

The following code

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>

<script> new Insertion.After('person', ' Are you there?'); </script>
			

Will change the HTML to

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span> Are you there?	
			

toc


The Field object

This object provides some utility functions for working with input fields in forms.

MethodKindArgumentsDescription
clear(field1 [, field2 [, field3 [...]]])instancefieldN: field element object or id Clears the value of each passed form field element.
present(field1 [, field2 [, field3 [...]]])instancefieldN: field element object or id Returns true only if all forms fields contain non-empty values.
focus(field)instancefield: field element object or id Moves the input focus to the given form field.
select(field)instancefield: field element object or id Selects the value in fields that support text selection
activate(field)instancefield: field element object or id Move the focus and selects the value in fields that support text selection

toc


The Form object

This object provides some utility functions for working with data entry forms and their input fields.

MethodKindArgumentsDescription
serialize(form)instanceform: form element object or id Returns a url-formatted list of field names and their values, like
'field1=value1&field2=value2&field3=value3'
findFirstElement(form)instanceform: form element object or id Returns the first enabled field element in the form.
getElements(form)instanceform: form element object or id Returns an Array
containing all the input fields in the form.
getInputs(form [, typeName [, name]])instance form: form element object or id, typeName: the type of the input element,
name: the name of the input element.
Returns an Array
containing all the <input> elements in the form.
Optionally, the list can be filtered by the
type or name attributes of the elements.
disable(form)instanceform: form element object or id Disables all the input fields in the form.
enable(form)instanceform: form element object or id Enables all the input fields in the form.
focusFirstElement(form)instanceform: form element object or id Activates the first visible, enabled input field in the form.
reset(form)instanceform: form element object or id Resets the form. The same as calling the
reset() method of the form object.

toc


The Form.Element object

This object provides some utility functions for working with form elements, visible or not.

MethodKindArgumentsDescription
serialize(element)instanceelement: element object or id Returns the element's name=value pair, like
'elementName=elementValue'
getValue(element)instanceelement: element object or id Returns the value of the element.

toc


The Form.Element.Serializers object

This object provides some utility functions that are used internally in the library to
assist extracting the current value of the form elements.

MethodKindArgumentsDescription
inputSelector(element)instanceelement: object or id
of a form element that has the checked property,
like a radio button or checkbox.
Returns an Array with
the element's name and value, like
['elementName', 'elementValue']
textarea(element)instanceelement: object or id
of a form element that has the value property,
like a textbox, button or password field.
Returns an Array with
the element's name and value, like
['elementName', 'elementValue']
select(element)instanceelement: object
of a <select> element
Returns an Array with
the