вторник, 20 апреля 2010 г.

JavaScript: закрывать псевдопопап по Escape

Как закрывать псевдопопапы по нажатию Esc.

1. Ставим обработчик в body:

<body onkeydown="if (event.keyCode == 27) closePopup();">


2. Создаём массив, в котором будет храниться список открытых окон:

// Список открытых окон
var popupList = new Array();


3. Запиливаем вот эти функции:

// Закрывает открытое окно
function closePopup() {
if (popupList.length == 0) return;
document.getElementById(popupList.pop()).style.display = 'none';
}

// Удаляет элемент из массива
function popAssoc(arr,itm) {
var arr1 = new Array();
for (i=0;i<arr.length;i++) {
if (arr[i] != itm) arr1.push(arr[i]);
}
return arr1;
}

// Показывает всплывающее окно по центру экрана рядом с курсором мыши
function showWin(id, event, firstField) {
// Если окно уже показано, прячем его
if (document.getElementById(id).style.display == 'block') {
popupList = popAssoc(popupList,id);
document.getElementById(id).style.display = 'none';
} else {
// Запоминаем окно в списке открытых
popupList.push(id);
// Вычисляем координаты
thisWin = document.getElementById(id);
thisWin.style.top = getYCoord(parseInt(thisWin.style.height), event);
thisWin.style.left = (document.body.clientWidth - parseInt(thisWin.style.width)) / 2;
// Показываем окно
thisWin.style.display = 'block';
// Фокусируемся на первом поле
if (firstField) setFocus(firstField);
}
}


Про вычисление координат для окна я уже писал раньше:
http://hilocomod.blogspot.com/2010/03/js.html

3 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Прекрасный материал. Только Вы забываете про проблему с именами открываемых окон. Если дочернее окно перегружено, переменная с указателем на окно перестает существовать, а обратиться к нему по имени яваскрипт не представляет возможности

    Автоматизированные системы управления

    ОтветитьУдалить
  3. Hard Rock Hotel & Casino Richmond - Mapyro
    Hard Rock Hotel & Casino 보령 출장마사지 Richmond is 춘천 출장안마 an MGM Resorts International 김포 출장안마 Hotel & Casino 나주 출장샵 in Richmond, Virginia. It 양산 출장샵 is owned by MGM Resorts International,

    ОтветитьУдалить