/, / , , .
.
http://jsfiddle.net/CoryDanielson/4jBgs/10/
, .
-, activeInput, DOMElement , . ( )
var activeInput = false;
, DOMElements, , escaped ( , )
var escapableElements = [];
escapableElements = escapableElements.concat(
Array.prototype.slice.call(document.getElementsByTagName('select')),
Array.prototype.slice.call(document.getElementsByTagName('input'))
);
eventListeners focus blur ( ). ( )
forEach(escapableElements, function() {
this.addEventListener('focus', registerActiveElement);
this.addEventListener('blur', deregisterActiveElement);
});
function registerActiveElement() {
if (!activeInput)
activeInput = this;
}
function deregisterActiveElement() {
if (activeInput)
activeInput = false;
}
eventListener keydown. , activeInput, , return true;, , ( ..), IS NOT a activeInput, ESC hide_dialog_box(event.keyCode);
ESC , , activeInput. activeInput, ( ESC ), activeInput, event.preventDefault(), ESC hide_dialog_box(keyCode), return false;, ESC.
document.addEventListener('keydown', function(event) {
if (!activeInput) {
if (event.keyCode == 27) {
event.preventDefault();
hide_dialog_box(event.keyCode);
return false;
}
} else {
return true;
}
});
2 - hide_dialog_box(keyCode) , , NodeList, escapableElements
function hide_dialog_box(keyCode) {
var dialog_box = document.getElementById('dialog_box');
dialog_box.style.display = 'none';
}
function forEach(list, callback) {
for (var i = 0; i < list.length; i++)
{
callback.call(list[i]);
}
}