Я хотел бы добавить поддержку сочетаний клавиш для нескольких страниц в моем веб-приложении, перехватывая обработчик события нажатия клавиши объекта документа, а не атрибут accesskey.

Проблема в том, что у каждого браузера есть свои комбинации клавиш, поэтому невозможно создать набор комбинаций клавиш, которые работают во всех веб-браузерах и в то же время согласованы (например, было бы глупо, если бы ярлык для сохранения был Ctrl + Shift + S , в то время как один для удаления был Alt + D .)

Поэтому я подумал, что было бы проще переопределить ярлыки браузера на нескольких страницах вместе с моими.

Все в стороне, это возможно? Если так, то как ты это делаешь?

50
Tom Tucker 10 Сен 2010 в 02:06

4 ответа

Лучший ответ

Здесь вы найдете отличное освещение: http://unixpapa.com/js/key.html

Что касается того, следует ли это делать, редактор вопросов stackoverflow переопределяет довольно много ключей, не нарушая слишком много (наведите курсор на кнопки панели инструментов).

14
Brad Robinson 9 Сен 2010 в 22:22

Вот мое решение этой проблемы:

Большинство (если не все) ярлыков браузера будут переопределены. Только системные, такие как Alt + Tab или клавиша Windows , не будут.

document.onkeydown = overrideKeyboardEvent;
document.onkeyup = overrideKeyboardEvent;
var keyIsDown = {};

function overrideKeyboardEvent(e){
  switch(e.type){
    case "keydown":
      if(!keyIsDown[e.keyCode]){
        keyIsDown[e.keyCode] = true;
        // do key down stuff here
      }
    break;
    case "keyup":
      delete(keyIsDown[e.keyCode]);
      // do key up stuff here
    break;
  }
  disabledEventPropagation(e);
  e.preventDefault();
  return false;
}
function disabledEventPropagation(e){
  if(e){
    if(e.stopPropagation){
      e.stopPropagation();
    } else if(window.event){
      window.event.cancelBubble = true;
    }
  }
}
11
Peter Duniho 22 Ноя 2015 в 04:32

Вот мое решение:

document.onkeydown = function () {
                       if ((window.event.keyCode == 121) && (window.event.ctrlKey))) {
               window.event.returnValue = false;
               window.event.cancelBubble = true;
               window.event.keyCode = 0;
               return false;
           }
       }
0
Leviand 25 Июл 2018 в 08:10
onkeydown = function(e){
  if(e.ctrlKey && e.keyCode == 'S'.charCodeAt(0)){
    e.preventDefault();
    //your saving code
  }
}
37
antimatter15 9 Сен 2010 в 22:13