Posts Tagged event
Custom events in javascript by making your own Dispatcher class.
Posted by Erik Karlsson in JavaScript, Web development on July 24th, 2009
Don’t have the time to comment the code and explain right now, but I will update the post later on ![]()
I wrote this in about 2minutes to help out a guy just before going to bed so I’ve only tested the addEventListener and dispatch functionality (not removeEventListener), but it actually worked in IE7, IE8, Firefox 3.5, Chrome2 and Stainless (Webkit based browser under osx) on the first try.
Feel free to comment if you find this useful
/** * @author Erik Karlsson, www.nonobtrusive.com */ function Dispatcher(){ this.events=[]; } Dispatcher.prototype.addEventlistener=function(event,callback){ this.events[event] = this.events[event] || []; if ( this.events[event] ) { this.events[event].push(callback); } } Dispatcher.prototype.removeEventlistener=function(event,callback){ if ( this.events[event] ) { var listeners = this.events[event]; for ( var i = listeners.length-1; i>=0; --i ){ if ( listeners[i] === callback ) { listeners.splice( i, 1 ); return true; } } } return false; } Dispatcher.prototype.dispatch=function(event){ if ( this.events[event] ) { var listeners = this.events[event], len = listeners.length; while ( len-- ) { listeners[len](this); //callback with self } } } /** Below is some test-code to verify the most basic functionality **/ function SomeClass(){ Dispatcher.call(this); } SomeClass.prototype = new Dispatcher(); SomeClass.prototype.sendSomeEvent=function(){ this.dispatch("test"); } var foo = new SomeClass(); foo.addEventlistener( "test", function(){ alert("bah"); } ) foo.sendSomeEvent();
Count the number of javascript eventhandlers in the DOM-tree.
Posted by Erik Karlsson in JavaScript, Web development on July 23rd, 2009
Sometimes I’ve wanted to find out how many eventhandlers there are attached to the DOM-tree I’m working with, but I’ve never found a good tool for doing this. I decided to write a simple javascript snippet that traverses the tree and finds the fact for me and it looks like its working pretty good too.
Please don’t hesitate to comment if you find this useful or have any improvement suggestions
/** * @author Erik Karlsson, www.nonobtrusive.com **/ function countEventHandlers(){ var elements = document.getElementsByTagName("*"), len = elements.length, counter = 0, countermap = [], /* fill up with more events if needed or just use those you want to look for */ events = ['onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onclick', 'onmousemove', 'ondblclick', 'onerror', 'onresize', 'onscroll', 'onkeydown', 'onkeyup', 'onkeypress', 'onchange', 'onsubmit'], eventlen = events.length; for ( var i = eventlen-1; i >= 0; --i ) { countermap[events[i]] = 0; //reset the map } while ( len-- ) { //go through all DOM-nodes var element = elements[len], tmp = eventlen; while ( tmp-- ) { //go through all events defined above for each node and see if it exists. if ( element[events[tmp]] ) { counter++; countermap[events[tmp]]++; } } } var someStats = counter + " events found in total\n\n"; for ( var o in countermap ) { someStats += o + " was found " + countermap[o] + " times\n"; } alert(someStats); }