Skip to content

Instantly share code, notes, and snippets.

@beaucharman
Last active December 14, 2015 18:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save beaucharman/5127116 to your computer and use it in GitHub Desktop.
Save beaucharman/5127116 to your computer and use it in GitHub Desktop.
event{} | JavaScript object | Cross Browser Event Handling
/**
* Event
* ------------------------------------------------------------------------
* event{}
* @version 1.0 | April 23rd 2013
* @author Beau Charman | @beaucharman | http://beaucharman.me
* @link https://gist.github.com/beaucharman/5127116
* @method add
* @method remove
* @method getTarget
* @method preventDefault
*
* Cross Browser Event Handling.
* ------------------------------------------------------------------------ */
var event = {
/**
* Add
* ------------------------------------------------------------------------
* event.add()
* @param {DOM node} el | the target element
* @param {string} type | the type of event to list for
* @param {function} fn | the callback fucntion
* ------------------------------------------------------------------------ */
add : function(el, type, fn) {
if ((el instanceof Array) || (el instanceof NodeList)) {
for (var ii = 0, ln = el.length; ii < ln; ii++) {
if (typeof addEventListener !== "undefined") {
el[ii].addEventListener(type, fn, false);
} else if (typeof attachEvent !== "undefined") {
el[ii].attachEvent("on" + type, fn);
} else {
el[ii]["on" + type] = fn;
}
}
} else {
if (typeof addEventListener !== "undefined") {
el.addEventListener(type, fn, false);
} else if (typeof attachEvent !== "undefined") {
el.attachEvent("on" + type, fn);
} else {
el["on" + type] = fn;
}
}
},
/**
* Remove
* ------------------------------------------------------------------------
* event.remove()
* @param {DOM node} el | the target element
* @param {string} type | the type of event to list for
* @param {function} fn | the callback fucntion
* ------------------------------------------------------------------------ */
remove : function(el, type, fn) {
if ((el instanceof Array) || (el instanceof NodeList)) {
for (var ii = 0, ln = el.length; ii < ln; ii++) {
if (typeof removeEventListener !== "undefined") {
el[ii].removeEventListener(type, fn, false);
} else if (typeof detachEvent !== "undefined") {
el[ii].detachEvent("on" + type, fn);
} else {
el[ii]["on" + type] = null;
}
}
} else {
if (typeof removeEventListener !== "undefined") {
el.removeEventListener(type, fn, false);
} else if (typeof detachEvent !== "undefined") {
el.detachEvent("on" + type, fn);
} else {
el["on" + type] = null;
}
}
},
/** Get Target
* ------------------------------------------------------------------------
* event.getTarget()
* @param {event} e | the event instance
* ------------------------------------------------------------------------ */
getTarget : function(e) {
if (typeof e.target !== "undefined") {
return e.target;
} else {
return e.srcElement;
}
},
/**
* Prevent Default
* ------------------------------------------------------------------------
* event.preventDefault()
* @param {event} e | the event instance
* ------------------------------------------------------------------------ */
preventDefault : function(e) {
if(typeof e.preventDefault !== "undefined") {
e.preventDefault();
} else {
e.returnValue = false;
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment