jQuery UI Custom Control - Widget Factory
jQuery UI Custom Control - Widget Factory
Written by Ian Elliot   
Wednesday, 17 April 2013
Article Index
jQuery UI Custom Control - Widget Factory
Method and Events



Your custom control is most likely to have methods that the user can make use of and these are very easy to build into the framework. 

Let's suppose that the button has a Move method -

move: function(dx) {
 var x = dx+parseInt(this._button.css("left"));
 this._button.css("left", x);

that shifts the button a specified horizontal distance.  To make this work we also need to set the position and left properties in the _create function:

this._button.css("position", "absolute"); this._button.css("left", "100px");

Following this the user can now call your method in the usual jQuery UI way:

$("div").myButton("move", 200);

This is all you have to do. Add a method to the object that defines your widget. Give it a name that doesn't start with an underscore because it isn't private. The user can then call it by specifying its name and supplying arguments. 


Events are always the most difficult part of creating a custom anything and using events the most difficult part of using a custom anything. In this case things aren't so bad. 

To create an event all you have to do is use the _trigger method. The first parameter is the name of the event, the second any standard event object you want to pass and the third any custom event object you want to pass. 

Some times custom event are simply triggered by existing events on the DOM objects that make up your custom control and then you are mostly passing on the event to the user. However you can invent events of your own. For example let us suppose that you want to fire an event if the button moves beyond x=400 say - yes I can't think of a reason for doing this either but it is a simple example. 

All you have to do is to add to the move function:

if(x>400){ this._trigger("outbounds",{},
                           {position:x}); }

In this case the event is called outbounds and an empty event object is passed with a custom event object that simply supplies the position as its only property. 

The entire move function is:

move: function(dx) {
 var x = dx+parseInt(this._button.css("left"));
 this._button.css("left", x);
 if(x>400){ this._trigger("outbounds",{},
                              {position:x}); }

The user can set the event handling function by simply defining an option of the same name. For example:

   {width: 100,
    color: "red",

The event handler for the outbounds event simply posts and alert box showing the position. If you now do

$("div").myButton("move", 500);

then the alert will appear as the event handler is called.

You can also use bind to late bind an event handler to the event. The only difference is that the name of the event is augmented by the name of the widget. So to bind to outbounds you would use:


Notice that the name of the widget is all lower case even if you named it with a mixture of upper and lower case. You can change the prefix used on the event name by altering the widgetEventPrefix property.

You can also use on and off to attach and remove event handlers:



Notice that you can also define options as functions to be used as callbacks in more general contexts than events. 

Where Next?

There are a lot of other functions supplied by the framework that you can override. You might like to take a look at the _destroy function which you need to clean up when your widget is removed. There are also a few other useful functions that you might want to override such as show, hide and so on but mostly things work as you would expect and now you have got started with custom widgets the rest is fairly easy.  Notice that if you want your widget to  be styled using standard jQuery UI style sheet and themeroller then you need to assign the standard style names to the components of your widget.


You can download the code for this program from the CodeBin (note you have to register first).


JavaScript Data Structures - Array Object

When JavaScript was first introduced to the world it didn't have a dedicated Array data structure - it simply didn't need one, but it got one nevertheless!

Here we look at the Array object, which is  [ ... ]

jQuery 3 - Forms

Forms are a special part of the HTML UI because they provided a way to get data back to the server. You can get data back to the server in other ways, namely Ajax but Forms are still a good way to wor [ ... ]

Other Articles


Last Updated ( Tuesday, 25 August 2015 )

Copyright © 2017 i-programmer.info. All Rights Reserved.
Joomla! is Free Software released under the GNU/GPL License.