I like @gillesc answer, it's on the right tracks. However, I think we can do better.
The main problem with @gillesc 's answer is that there is no dynamic aspect of things (like event handlers), and also forces you to define ugly callback functions.
So, as I think, you should solve your problem.
// Test object var testObj = { // Our event handlers. // Notice how we must only define the callback function name here. // Not the function itself. The callback function must be defined in testObj. handlers: { '#form submit': 'onSubmit' }, // Method that will register all handlers to some selector registerHandlers: function() { var that = this; // Go through the handlers list. $.each(this.handlers, function(k, v) { // Parsing the event to two different parts. // 1. trigger event // 2. selector var split = k.split(" "), el = split[0], trigger = split[1]; // Delegating the trigger to selector $(document).delegate(el, trigger, that[v]); }); }, // Our actual callback function onSubmit: function(evt) { evt.preventDefault(); alert("submit"); } };
How will all this work? It is easy! We just need to call testObj.registerHandlers() .
Jsfiddle demo
Kirstein
source share