Created
May 31, 2011 18:05
-
-
Save mjackson/1000988 to your computer and use it in GitHub Desktop.
Generic add/remove event functions for JavaScript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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