Skip to content

Instantly share code, notes, and snippets.

@gavacho
Created September 27, 2012 18:25
Show Gist options
  • Save gavacho/3795551 to your computer and use it in GitHub Desktop.
Save gavacho/3795551 to your computer and use it in GitHub Desktop.
A shim for older versions of jQuery which don't have the `on` method defined.
(function( $ ) {
'use strict';
if ( !$.fn.on && $.fn.live && $.fn.bind ) {
$.fn.on = function() {
var args = createObjectFromArgs( arguments );
if ( args.selector ) {
this.find( args.selector ).live( args.events, args.data, args.handler );
} else {
this.bind( args.events, args.data, args.handler );
}
// support chaining
return this;
};
}
function createObjectFromArgs( args ) {
var o = {},
argumentNames = getArrayOfArgumentNames( args );
$.each( argumentNames, function( index, argumentName ) {
o[ argumentName ] = args[ index ];
} );
return o;
}
function getArrayOfArgumentNames( args ) {
if ( args.length === 2 ) {
return [ 'events', 'handler' ];
}
if ( args.length === 3 && typeof args[ 1 ] === 'string' ) {
return [ 'events', 'selector', 'handler' ];
}
if ( args.length === 3 && typeof args[ 1 ] !== 'string' ) {
return [ 'events', 'data', 'handler' ];
}
if ( args.length === 4 ) {
return [ 'events', 'selector', 'data', 'handler' ];
}
throw new Error( 'could not determine the order of arguments to jQuery.fn.on' );
}
}( jQuery ));
@gavacho
Copy link
Author

gavacho commented Sep 28, 2012

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment