Skip to content

Instantly share code, notes, and snippets.

@nuxodin
Last active February 7, 2024 16:40
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save nuxodin/9250e56a3ce6c0446efa to your computer and use it in GitHub Desktop.
Save nuxodin/9250e56a3ce6c0446efa to your computer and use it in GitHub Desktop.
focusin focusout support for firefox
/* Copyright (c) 2016 Tobias Buschor https://goo.gl/gl0mbf | MIT License https://goo.gl/HgajeK */
/* focusin/out event polyfill (firefox) */
!function(){
var w = window,
d = w.document;
if (w.onfocusin === undefined) {
d.addEventListener('focus' ,addPolyfill ,true);
d.addEventListener('blur' ,addPolyfill ,true);
d.addEventListener('focusin' ,removePolyfill ,true);
d.addEventListener('focusout' ,removePolyfill ,true);
}
function addPolyfill(e){
var type = e.type === 'focus' ? 'focusin' : 'focusout';
var event = new CustomEvent(type, {bubbles:true, cancelable:false});
event.c1Generated = true;
e.target.dispatchEvent(event);
}
function removePolyfill(e){
if (!e.c1Generated) { // focus after focusin, so chrome will the first time trigger tow times focusin
d.removeEventListener('focus' ,addPolyfill ,true);
d.removeEventListener('blur' ,addPolyfill ,true);
d.removeEventListener('focusin' ,removePolyfill ,true);
d.removeEventListener('focusout' ,removePolyfill ,true);
}
setTimeout(function(){
d.removeEventListener('focusin' ,removePolyfill ,true);
d.removeEventListener('focusout' ,removePolyfill ,true);
});
}
}();
@arnaudleyder
Copy link

Thanks. That does the trick. FF still does not support these events in August 2015. They did drop the ball at some point in time.

@Gonzalo2683
Copy link

How to use?

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