Как обрабатывать нажатие клавиши ESC во всплывающем окне javascript

У меня есть всплывающее окно javascript window.open, и я хочу, чтобы всплывающее окно закрывалось, когда пользователь нажимает клавишу ESC. Я не могу понять, как привязать событие нажатия клавиши (и на каком объекте?), Чтобы я мог поймать клавишу ESC.

Я использую jQuery.


person Andrew Arnott    schedule 26.09.2009    source источник


Ответы (8)


Попробуйте что-то вроде этого:

$(document).keydown(function(e) {
    // ESCAPE key pressed
    if (e.keyCode == 27) {
        window.close();
    }
});
person Gumbo    schedule 26.09.2009
comment
Спасибо, Гамбо, за это. Это было первым делом в Google :) - person dvlden; 18.11.2012

Этого можно добиться с помощью JS без использования jQuery.

window.onkeydown = function( event ) {
    if ( event.keyCode == 27 ) {
        console.log( 'escape pressed' );
    }
};
person user3874938    schedule 24.07.2014
comment
Я понимаю, что это отклонено, потому что вопрос задан для jQuery, но для тех, кто ищет чистый JavaScript, этот ответ очень полезен. Итак, 1 голос за меня. - person Jan Derk; 24.08.2014
comment
Имейте в виду, что jQuery не отменяет возможность использования обычного JS. - person Nick T; 06.10.2015
comment
Потрясающий. Огромное спасибо! - person Ivor Scott; 09.11.2016
comment
Мне нравится видеть ванильные решения. Так чертовски уродливо, но все же просто. - person CodeUK; 12.10.2018

event.key === Побег

Больше никаких произвольных числовых кодов!

document.addEventListener('keydown', function(event) {
    const key = event.key; // const {key} = event; in ES6+
    if (key === "Escape") {
        window.close();
    }
});

Документы Mozilla

Поддерживаемые браузеры

person Gibolt    schedule 03.12.2017

Помните, что вы должны использовать функцию опубликовано @Gumbo во всплывающем окне ... Таким образом, вам нужно будет включить JQuery во всплывающее окно и выполнить там функцию, а не окно, открывающее всплывающее окно.

person PatrikAkerstrand    schedule 26.09.2009
comment
Что такое Гамбо? (бессмысленный интервал для Stackoverflow) - person Andrew Arnott; 26.09.2009
comment
Машина имеет в виду функцию, которую опубликовал Гамбо (которую вы приняли). - person Darryl Hein; 26.09.2009

Для обработки как esc, так и клавиши ввода в диалоговом окне. Onkeydown = function (event) {

if(event.keyCode===27|| event.keyCode===13){
   window.close();
}
}
person Mukesh Kumar    schedule 17.08.2020

Вы можете легко добиться привязки ключевых событий с помощью JQuery.

Здесь вы можете использовать .keydown()

Список кодов клавиш клавиатуры

  $(document).keydown(function(e) {        
    if (e.keyCode == 27) {
        window.close();
    }
});
person TheDean    schedule 18.01.2014

Ответ @Gumbo хорош, но часто вам нужно отключить это поведение, поэтому я предлагаю использовать обработчик событий one:

$(document).one('keydown', function(e) {
    // ESCAPE key pressed
    if (e.keyCode == 27) {
        window.close();
    }
});

OR

$(document).on('keydown', function(e) {
    // ESCAPE key pressed
    if (e.keyCode == 27) {
        window.close();
    }
});

и когда будете готовы прекратить поведение

$(document).off('keydown');
person Guillaume Bois    schedule 25.08.2016

В случае, если кто-то ищет всплывающее решение angularjs, вы идете

* это без использования зависимости ui-bootstrap (рекомендуется только тогда, когда нет другого пути)

$scope.openModal = function(index){
    $scope.showpopup = true;
    event.stopPropagation();//cool part
};

$scope.closeModal = function(){
    $scope.cc.modal.showpopup = false;
};

window.onclick = function() {
  if ($scope.showpopup) {
      $scope.showpopup = false;
      // You should let angular know about the update that you have made, so that it can refresh the UI
      $scope.$apply();
  }
};

//escape key functionality playing with scope variable
document.onkeydown = function (event) {
  const key = event.key; // const {key} = event; in ES6+
  if (key === "Escape") {
    if ($scope.showpopup) {
        $scope.showpopup = false;
        // You should let angular know about the update that you have made, so that it can refresh the UI
        $scope.$apply();
    }
  }
};

Ссылки: ответы выше и http://blog.nkn.io/post/hiding-menu-when-clicking-outside---angularjs/

person narasimharaosp    schedule 21.12.2018