Skip to content

Instantly share code, notes, and snippets.

@herdianf
Created July 18, 2018 15:53
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 herdianf/c49fe6621063ebd384cbca726f286fab to your computer and use it in GitHub Desktop.
Save herdianf/c49fe6621063ebd384cbca726f286fab to your computer and use it in GitHub Desktop.
JS Add Event
//from here
//https://stackoverflow.com/questions/10149963/adding-event-listener-cross-browser
//by https://stackoverflow.com/users/816620/jfriend00
//with some mods
// add event cross browser
function addEvent(elem, event, fn) {
// avoid memory overhead of new anonymous functions for every event handler that's installed
// by using local functions
function listenHandler(e) {
var ret = fn.apply(this, arguments);
if (ret === false) {
e.stopPropagation();
e.preventDefault();
}
return(ret);
}
function attachHandler() {
// set the this pointer same as addEventListener when fn is called
// and make sure the event is passed to the fn also so that works the same too
var ret = fn.call(elem, window.event);
if (ret === false) {
window.event.returnValue = false;
window.event.cancelBubble = true;
}
return(ret);
}
if (elem.addEventListener) {
elem.addEventListener(event, listenHandler, false);
return {elem: elem, handler: listenHandler, event: event};
} else {
elem.attachEvent("on" + event, attachHandler);
return {elem: elem, handler: attachHandler, event: event};
}
}
function removeEvent(token) {
if (token.elem.removeEventListener) {
token.elem.removeEventListener(token.event, token.handler);
} else {
token.elem.detachEvent("on" + token.event, token.handler);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment