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).



Chapter List 

  1. The DOM
  2. CSS Selectors
  3. Filters
  4. Advanced Filters
  5. Manipulating The DOM
  6. Promises & Deferred
  7. Promises, Deferred & WebWorkers
  8. Ajax the Basics - get
  9. Ajax the Basic -  post
  10. Ajax - Advanced Ajax To The Server 
  11. Ajax - Advanced Ajax To The Client
  12. Ajax - Advanced Ajax Transports And JSONP
  13. Ajax - Advanced Ajax The jsXHR Object
  14. Ajas - Advanced Ajax Character Coding And Encoding
  15. jQuery - Easy Plugins
  16. jQuery UI
  17. jQuery UI Custom Control - Widget Factory
  18. Getting Started With QUnit Testing

To be informed about new articles on I Programmer, install the I Programmer Toolbar, subscribe to the RSS feed, follow us on, Twitter, FacebookGoogle+ or Linkedin,  or sign up for our weekly newsletter.


blog comments powered by Disqus



Getting Started With jQuery - Advanced Ajax To The Client

An Ajax request is a two-way interaction. Some data is sent to the server and the server sends some data back to the client.  In this chapter we look at the problems of sending data to the client [ ... ]

Getting Started With jQuery - Advanced Ajax

So far in our exploration of jQuery we have used the "shorthand" Ajax methods. These are all implemented as calls the to the full jQuery ajax method and if you want to do anything slightly o [ ... ]

Other Articles


Last Updated ( Tuesday, 25 August 2015 )

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