Вот как я это сделал:
$(document).on("keydown", function(e){
var isInput = false;
var activeElement = document.activeElement; // this will get the currently focused dom node
switch(activeElement.tagName.toLowerCase()){
case "input":
case "textarea":
case "select":
isInput = true;
}
if(!isInput){
// execute your code here
}
});
Если вам нужна поддержка contenteditable
элементов, вы можете изменить свой оператор if на:
if(!isInput && !activeElement.hasAttribute("contenteditable")){
// your code
}
EDIT : для улучшения читабельности и удаления оператора switch вы также можете сделать что-то подобное (хотя это будет работать только в относительно современных браузерах; Edge 14+).
$(document).on("keydown", function(e){
var active = document.activeElement;
if(!["input", "textarea", "select"].includes(active.tagName.toLowerCase())){
// execute your code here
}
});