Skip to content

Instantly share code, notes, and snippets.

@micah1701
Last active November 11, 2017 20:25
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 micah1701/510cdde498bcaee192715b23fabc168e to your computer and use it in GitHub Desktop.
Save micah1701/510cdde498bcaee192715b23fabc168e to your computer and use it in GitHub Desktop.
Register multiple "ESC" key handlers so hitting the escape key only does the most recently registered action. (requires jQuery)
var escEvents = new Array();
// If something needs to listen for the "ESC" key to be pressed, pass that functionality here
// eventName STRING a name for this event, like "myPopupDialog"
// eventFunction FUNCTION what to do when the user hits the escape key
function setEscEvent(eventName, eventFunction){
escEvents.push({ eventName: eventName, eventFunction: eventFunction });
}
// When an item doesn't need to listen for the "ESC" key anymore, remove it
// this is called automatically after escape is pressed, but if you no longer need to listen you can call it manually
// eventName STRING the name assigned to the event in setEscEvent()
function unsetEscEvent(eventName)
{
$.each(escEvents, function (index, value) {
console.log(value);
if (value['eventName'] == eventName)
{
escEvents.splice(index);
}
});
}
// When the "ESC" key is pressed, do the most recent registered function
// then unset this listener since the event is over
function runEscEvent()
{
var lastEvent = escEvents.length - 1;
eval(escEvents[lastEvent].eventFunction());
unsetEscEvent(escEvents[lastEvent].eventName);
}
// This is the listener for the escape key to be pressed
$(document).on( 'keyup', function ( event ){
event.preventDefault();
if (escEvents.length > 0 && event.keyCode === 27) {
runEscEvent();
}
} );
/* ************** */
// EXAMPLE USAGE:
function myPopup()
{
// ... code to open the popup
//if the user hits the escape key, close the popup
setEscEvent('popup',function () { closePopup() });
//if the user clicks the "close" button or anywhere outside the popup, close it.
//if your event doesn't have another way to close it (and the user has to press ESC) then this is OPTIONAL
$("#popup-close, #modal-background").on("click", function (e) {
closePopup(); // run the function to close the popup
unsetEscEvent('popup'); // manually unset the ESC key listener since we no longer need it
});
}
function closePopup()
{
// ...code to close the popup
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment