Skip to content

Instantly share code, notes, and snippets.

@ronnyhaase
Last active August 29, 2015 14:20
Show Gist options
  • Save ronnyhaase/d705f9c71e71df831480 to your computer and use it in GitHub Desktop.
Save ronnyhaase/d705f9c71e71df831480 to your computer and use it in GitHub Desktop.
Firing / Toggling DOM events natively
function toggleEvent(element, event, bubbles, cancelable) {
var evType,
ev;
if ( bubbles !== false ) bubbles = true;
if ( cancelable !== false ) cancelable = true;
// Good browser
if ( element.dispatchEvent !== undefined ) {
evType = typeof Event;
// Awesome browser (Chrome 15+, Firefox 11+, Opera 11.60+)
if (evType === 'function') {
return element.dispatchEvent(new Event(event, {bubbles:bubbles, cancelable:cancellable}));
// Just good (Safari, mobile browsers?)
} else {
ev = document.createEvent('HTMLEvents');
ev.initEvent(event, bubbles, cancellable);
return element.dispatchEvent(ev);
}
// Evil browser (ALL IEs)
} else {
ev = document.createEventObject();
return element.fireEvent('on' + event, ev);
}
}
@ronnyhaase
Copy link
Author

Yes, this is the painful truth, even for newer browsers.

https://developer.mozilla.org/en-US/docs/Web/API/Event/Event#Browser_compatibility

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