JavaScript: обработка ключевых событий после назначения фокуса - PullRequest
0 голосов
/ 29 июня 2010

В моем приложении мне нужно было создавать собственные всплывающие окна, и при попытке закрыть их я столкнулся с проблемой.Чтобы открыть всплывающее окно, пользователь должен нажать «ENTER» при выборе пункта меню.Оттуда появляется меню, фокусировка кнопки закрытия и закрывается после нажатия «ENTER» при выборе пункта «закрыть» или «отправить».

Когда пользователь пытается закрыть всплывающее окно, оно закрывается, но затем просто заканчивается его открытием снова, так как ключевое событие не используется функцией закрытия.

В настоящее время у меня есть функция ключевого события для событий onkeyup в документе, которая включает навигацию, затем я попытался назначить функцию закрытия всплывающих окон для onclick, onkeyup и onkeypress, но независимо от того, что я пытаюсь, нажимая 'После того, как всплывающее окно закрывается, ENTER всегда завершает выполнение функции события главной клавиши.

Мое текущее быстрое исправление использует два дополнительных логических значения, одно из которых становится истинным после закрытия всплывающего окна, а другое становится истинным послеФункция события основного ключа видит, что первый логический параметр становится истинным (поскольку после закрытия окна только один логический параметр становится истинным, это все равно позволило событию по какой-то причине достичь основной функции).

Поскольку при выходе из всплывающего окна мне нужно будет выбрать один и тот же пункт меню, отменить выбор пункта меню, сохранить его место, а затем вернуться к нему, также потребуется больше глобальных переменных.

Яв основном, просто интересно, есть ли лучший способ сделать это, так как я не хочу, чтобы две дополнительные глобальные переменные плавали вокруг ...

Ответы [ 2 ]

0 голосов
/ 29 июня 2010

ОБНОВЛЕНИЕ : я ответил почти на один и тот же вопрос только за нажатие клавиши пробела в разных ситуациях.Вот и все: Проверьте это.


Кроме того, флаги не так уж и плохи.Если вас беспокоит глобальное пространство имен (что является хорошей практикой), вы можете сделать две вещи:

1. функции являются объектами.Они могут иметь свойства (статические переменные, если хотите), доступные при каждом вызове.

function handler() {
  if ( handler.opened ) {
    // close window
    // ...
    handler.opened = false;
  } else {
    // open window
    // ...
    handler.opened = true;
  }
}

// initialize property
handler.opened = false;
0 голосов
/ 29 июня 2010

Попробуйте использовать event.preventDefault ( информация здесь ). Прокрутите вниз до раздела, озаглавленного «Предотвратить дефолт»

...