Skip to content

Instantly share code, notes, and snippets.

@mjackson
Created May 31, 2011 18:05
Show Gist options
  • Save mjackson/1000988 to your computer and use it in GitHub Desktop.
Save mjackson/1000988 to your computer and use it in GitHub Desktop.
Generic add/remove event functions for JavaScript
// Event handling functions modified from originals by Dean Edwards.
// http://dean.edwards.name/my/events.js
var guid = 1;
// Adds an event handler to the given element. The handler will be called
// in the context of the element with the event object as its only argument.
function addEvent(element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
} else {
if (element.nodeType === 3 || element.nodeType === 8) {
return;
}
if (element.setInterval && (element !== window && !element.frameElement)) {
element = window;
}
if (!handler.__guid) {
handler.__guid = guid++;
}
if (!element.events) {
element.events = {};
}
var handlers = element.events[type];
if (!handlers) {
handlers = element.events[type] = {};
if (element["on" + type]) {
handlers[0] = element["on" + type];
}
}
handlers[handler.__guid] = handler;
element["on" + type] = handleEvent;
}
}
function handleEvent(event) {
event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
var result = true, handlers = this.events[event.type];
for (var id in handlers) {
if (handlers[id].call(this, event) === false) {
result = false;
}
}
return result;
}
function preventDefault() {
this.returnValue = false;
}
function stopPropagation() {
this.cancelBubble = true;
}
function fixEvent(event) {
event.preventDefault = preventDefault;
event.stopPropagation = stopPropagation;
event.target = event.srcElement;
event.keyCode = event.which;
return event;
}
// Removes an event handler from the given element.
function removeEvent(element, type, handler) {
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else {
if (element.events && element.events[type] && handler.__guid) {
delete element.events[type][handler.__guid];
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment