Try Tuts+ Premium, Get Cash Back!
JavaScript from Null: Cross-Browser Event Binding
videos

JavaScript from Null: Cross-Browser Event Binding

Tutorial Details
  • Subject: JavaScript
  • Estimated Difficulty: Beginner - Intermediate
  • Tutorial Format: 29 Minute Screencast
Download Source Files
This entry is part 6 of 7 in the series javascript-from-null

The Full Series

In chapter five of this series, we jumped into the muddy world of event listeners. In that episode, we only got our feet wet; however, today, we’ll take things a step further as we implement a far more efficient solution. Along the way, we’ll learn a plethora of new techniques.

As with every JavaScript from Null screencast, it’s not essential that you view the previous entries in the series before watching.


Chapter 6: Cross-Browser Event Binding

Premium Members: Download this Video ( Must be logged in)

Our Final Code

var addEvent = (function( window, document ) {
	if ( document.addEventListener ) {
		return function( elem, type, cb ) {
			if ( (elem && !elem.length) || elem === window ) {
				elem.addEventListener(type, cb, false );
			}
			else if ( elem && elem.length ) {
				var len = elem.length;
				for ( var i = 0; i < len; i++ ) {
					addEvent( elem[i], type, cb );
				}
			}
		};
	}
	else if ( document.attachEvent ) {
		return function ( elem, type, cb ) {
			if ( (elem && !elem.length) || elem === window ) {
				elem.attachEvent( 'on' + type, function() { return cb.call(elem, window.event) } );
			}
			else if ( elem.length ) {
				var len = elem.length;
				for ( var i = 0; i < len; i++ ) {
					addEvent( elem[i], type, cb );
				}
			}
		};
	}
})( this, document );
// Example Usage
var lis = document.getElementsByTagName('li');
addEvent( window, 'click', function() {
	this.style.border = '1px solid red';
	
});

Please note that this code is slightly revised, based upon some excellent feedback in the comments section.

Series Navigation«JavaScript from Null: Chapter 5 – EventsJavaScript from Null: Utility Functions and Debugging»

Tags: Videos
Note: Want to add some source code? Type <pre><code> before it and </code></pre> after it. Find out more
  • Juanfe

    Wow!! I´ll have to watch this again, quite difficult :(

  • Nico Beta

    In the usage example, you’re doing

    addEvent( window, ‘click’, function() {
    this.style.border = ’1px solid red’;
    });

    instead of

    addEvent( lis, ‘click’, function() {
    this.style.border = ’1px solid red’;
    });

    You were passing the window as a parameter when you need to pass the li collection called lis.

    Great tutorial, thanks !

    • Mark Folan

      That was confusing me too, and I just thought me brain was overloaded by the tutorial until I saw your comment. Great tuts though!