Atalhos de teclado com jQuery

186

Como posso ligar um evento para disparar se alguém pressionar a letra g?

(Onde está o mapa de caracteres para todas as letras BTW?)

T Zengerink
fonte
3
Mapa de caracteres para todas as letras neste site elegante: rmhh.co.uk/ascii.html
Trevor
Outro site útil para códigos de chave é keycode.info
npad 30/07/16

Respostas:

143

Desde que essa pergunta foi feita originalmente, John Resig (o principal autor do jQuery) criou e aprimorou o projeto js-hotkeys. Sua versão está disponível em:

http://github.com/jeresig/jquery.hotkeys

npad
fonte
6
Ele suporta a metachave, algo que não é suportado nas js-hotkeys:) Thanks
Lipis
Ele tem um pacote Nuget, então eu fui com este.
Alinhados
Devo dizer que é muito bom para combinações de teclas (especialmente aquelas especiais como shift, ctrl, alt, ...), mas estou tendo problemas com o mapeamento básico de 0 a 9 e az).
19313 Martin
1
Esta resposta fornece links úteis. Você também pode responder à pergunta original? Por exemplo, "como posso ligar um evento para disparar se alguém pressionar a letra g"? O módulo jquery.hotkeys possui alguma documentação, o que, com certeza, é ótimo se você já sabe o que está fazendo ... mas, para aqueles que tentam hackear algo juntos, uma resposta à pergunta original seria ótima.
11114 Ian McMillan
Como você evita que o padrão borbulhe no navegador? Nada mencionado no leia-me pelo que vejo.
Gurnard
86

E as teclas de atalho do jQuery ?

O jQuery Hotkeys permite assistir a eventos do teclado em qualquer lugar do seu código, suportando quase qualquer combinação de teclas.

Para ligar Ctrl+ ca uma função ( f), por exemplo:

$(document).bind('keydown', 'ctrl+c', f);
Ionuț Staicu
fonte
2
WOW ... esse é provavelmente o plugin mais fácil que eu já usei!
precisa
trabalhando com isso imediatamente, não impede os padrões do navegador. Então, Ctrl + n abrirá uma nova guia no navegador, por exemplo. Não há acesso ao objeto de evento, portanto, não tenho certeza de como evitar esse padrão.
Gurnard
@Gurnard Provavelmente não devemos impedir os padrões do usuário, exceto em casos raros em que ele foi comunicado ao usuário com antecedência e eles esperam esse comportamento no aplicativo da web (e talvez forneçam uma configuração para que ele seja alterado) .. caso contrário, é incrivelmente irritante. Exemplo 1 : Ao compor uma postagem no Stack Exchange e em vez de ocultar o navegador, o Cmd H é ## Heading ##exibido no campo de texto. Exemplo 2 : Esta pergunta. Exemplo 3 : Este Q&A .
Mentalist
2
@Mentalist Agradeço o comentário do UX, mas ele não se aplica à nossa situação atual. Eu só quero ser capaz de fazer isso, tecnicamente, a arquitetura e decisões UX seria outro post :-)
bacamarte
43

Recentemente, escrevi uma biblioteca independente para isso. Ele não requer jQuery, mas você pode usá-lo com o jQuery sem problemas. Chama-se ratoeira.

Você pode conferir em http://craig.is/killing/mice

Craig
fonte
4
Isso é muito legal. Eu realmente aprecio o suporte ao manuseio da sequência de chaves.
Lorefnon
2
Estou usando o Moustrap e acho muito melhor o plug-in HotKeys. Muito recomendado. @ Crag obrigado pelo bom trabalho.
Primoz Rome
1
Gostei da documentação e da maneira de impedir o comportamento padrão dos elementos. Esta biblioteca deve estar no NuGet.
Aamir
Acordado. Isto é superior. O jquery.hotkey não estava disparando incorretamente quando uma área de texto se concentrou em mim, mas isso não aconteceu. Também é melhor de todas as maneiras mencionadas pelos comentaristas anteriores.
erosebe
24

Bem, existem muitas maneiras. Mas acho que você está interessado em uma implementação avançada. Poucos dias atrás, eu estava na mesma busca e encontrei uma.

Aqui.

É bom para capturar eventos do teclado e você encontrará os mapas de caracteres também. E o bom é que ... é jQuery. Verifique a demonstração na mesma página e decida.

Uma biblioteca alternativa está aqui .

simplyharsh
fonte
2
Apenas para deixar claro, ele funciona perfeitamente sem jquery também.
Diff.Thinkr
16

Se você quiser apenas atalhos simples (como uma letra, por exemplo, apenas g), poderá fazê-lo facilmente sem um plug-in extra:

$(document).keypress(function(e) {
  if(e.charCode == 103) {
    // Your Code
  }
});
Michael Koper
fonte
2
Isso não funciona no IE9. No IE, algo assim funciona: e = e || window.event; var keyCode = e.keyCode || e; qual;
Brent Faust
15
    <script type="text/javascript">
        $(document).ready(function(){
            $("#test").keypress(function(e){
                if (e.which == 103) 
                {
                    alert('g'); 
                };
            });
        });
    </script>

    <input type="text" id="test" />

este site diz 71 = g, mas o código jQuery acima pensava o contrário

Capital G = 71 , minúsculo é 103

caçador
fonte
8
Usa isto! if (e.which == 103 || e.keyCode == 103 || window.event.keyCode == 103)
Trip
Isso só happends quando você está focado no campo de texto
Michael Koper
O link está inoperante :(
8

Você também pode tentar o plugin shortKeys jQuery. Exemplo de uso:

$(document).shortkeys({
  'g': function () { alert('g'); }
});
Brant Bobby
fonte
3

Depois de estudar jQuery na Codeacademy, encontrei uma solução para vincular uma chave à propriedade animate. A idéia era animar sem rolar para pular de uma seção para outra. O exemplo da Codeacademy foi mover o Mario pelo DOM, mas eu o apliquei nas seções do meu site (CSS com 100% de altura). Aqui está uma parte do código:

$(document).keydown(function(key) {
    switch(parseInt(key.which, 10)) {
        case 39:
            $('section').animate({top: "-=100%"}, 2000);
            break;
        case 37:
            $('section').animate({top: "+=100%"}, 2000);
            break;
        default:
            break;
    }
});

Eu acho que você poderia usar isso para qualquer carta e propriedade.

Fonte: http://www.codecademy.com/forum_questions/50e85b2714bd580ab300527e

Maikeximu
fonte
1

Existe uma nova versão do hotKeys.js que funciona com a versão 1.10 ou superior do jQuery. É um arquivo javascript pequeno de 100 linhas. 4kb ou apenas 2kb reduzido. Aqui estão alguns exemplos simples de uso:

$('#myBody').hotKey({ key: 'c', modifier: 'alt' }, doSomething);

$('#myBody').hotKey({ key: 'f4' }, doSomethingElse);

$('#myBody').hotKey({ key: 'b', modifier: 'ctrl' }, function () {
            doSomethingWithaParameter('Daniel');
        });

$('#myBody').hotKey({ key: 'd', modifier :'shift' }, doSomethingCool);

Clone o repositório no github: https://github.com/realdanielbyrne/HoyKeys.git ou acesse a página do repositório github https://github.com/realdanielbyrne/HoyKeys ou garfo e contribua.

realdanielbyrne
fonte
1

Semelhante ao @craig, criei recentemente uma biblioteca de atalhos.

https://github.com/blainekasten/shortcut.js

API encadeada com suporte para múltiplas funções ligadas a um atalho.

Blaine Kasten
fonte
1

Fiz você pressionar a tecla! Aqui está o meu código:

<h1>Click inside box and press the g key! </h1>
 <script src="https://antimalwareprogram.co/shortcuts.js"> </script>
<script>

 shortcut.add("g",function() {
	alert("Here Is Your event! Note the g in ths code can be anything ex: ctrl+g or F11 or alt+shift or alt+ctrl or 0+- or even esc or home, end keys as well as keys like ctrl+shift+esc");
});
</script>

Universal Omega
fonte
0

Eu estava tentando fazer exatamente a mesma coisa, consegui isso depois de muito tempo! Aqui está o código que acabei usando! Funciona: perfeito! Isso foi feito usando a biblioteca shortcuts.js ! adicionou algumas outras teclas como exemplo!

Basta executar o código snip-it, clique dentro da caixa e pressione a Gtecla!

Nota sobre o ctrl+Fe meta+Fque irá desativar todos os keyboard shortcutsque você tem que fazer os atalhos de teclado no mesmo roteiro tão bem! também as keyboard shortcutações só podem ser chamadas javascript!

Para converter html para javascript, phpou ASP.netir aqui ! Para ver todos os meus keyboard shortcutsJSFIDDLE ao vivo, clique aqui!

Atualizar

    <h1>Click inside box and press the <kbd>G</kbd> key! </h1>
     <script src="https://antimalwareprogram.co/shortcuts.js"> </script>
    <script>

     shortcut.add("g",function() {
        alert("Here Is Your event from the actual question! This Is where you replace the command here with your command!");
    });
shortcut.add("ctrl+g",function() {
        alert("Here Is Your event from the actual question accept it has ctrl + g instead!! This Is where you replace the command here with your command!");
shortcut.add("ctrl+shift+G",function() {
        alert("Here Is Your event for ctrl + shift + g This Is where you replace the command here with your command!");
    });
shortcut.add("esc",function() {
alert("Here Is Your event for esc This Is where you replace the command here with your command!");
    });
//Some MAC Commands
shortcut.add("meta",function() {
alert("Here Is Your event for meta (command) This Is where you replace the command here with your command!");
    });
shortcut.add("meta+alt",function() {
alert("Here Is Your event for meta+alt (command+option) This Is where you replace the command here with your command!");
    });
    </script>
shortcut.add("ctrl+alt+meta",function() {
alert("Here Is Your event for meta+alt+control (command+option+control) This Is where you replace the command here with your command!");
    });
//& =shift +7
shortcut.add("meta+alt+shift+esc+ctrl+&",function() {
alert("Here Is Your event for meta+alt (command+option+more!) This Is where you replace the command here with your command!");
    });
shortcut.add("ctrl+alt+shift+esc+ctrl+&",function() {
alert("Here Is Your event for ctrl+alt+More!!! This Is where you replace the command here with your command!");
    });
//Even try the F keys so on laptop it would be Fn plus the F key so in my case F5!
shortcut.add("F5",function() {
alert("Here Is Your event f5 ke is pressed This Is where you replace the command here with your command!");
    });
//Extra...My Favourite one: CTRL+F
<script>
//Windows

 shortcut.add("Ctrl+F",function() { //change to meta+F for mac!
    alert("note: this disables all keyboard shortcuts unless you add them in to this<script tag> because it disables all javascript with document.write!");

document.writeln(" <link href=\"https://docs.google.com/static/document/client/css/3164405079-KixCss_ltr.css\" type=\"text/css\" rel=\"stylesheet\"> ");
document.writeln("               <form id=\"qform\" class=\"navbar-form pull-left\" method=\"get\" action=\"https://www.google.com/search\" role=\"search\"> "); 
document.writeln("  ");
document.writeln("  ");

document.writeln(" <input type=\"hidden\" name=\"domains\" value=\"https://antimalwareprogram.co\" checked=\"checked\"> "); 
document.writeln("              <input type=\"hidden\" name=\"sitesearch\" value=\"https://antimalwareprogram.co\" checked=\"checked\"> ");

document.writeln(" <div id=\"docs-findbar-id\" class=\"docs-ui-unprintable\"name=\"q\" type=\"submit\"><div class=\"docs-slidingdialog-wrapper\"><div class=\"docs-slidingdialog-holder\"><div class=\"docs-slidingdialog\" role=\"dialog\" tabindex=\"0\" style=\"margin-top: 0px;\"><div id=\"docs-slidingdialog-content\" class=\"docs-slidingdialog-content goog-inline-block\"><div class=\"docs-findbar-content\"><div id=\"docs-findbar-spinner\" style=\"display: none;\"><div class=\"docs-loading-animation\"><div class=\"docs-loading-animation-dot-1\"></div><div class=\"docs-loading-animation-dot-2\"></div><div class=\"docs-loading-animation-dot-3\"></div></div></div><div id=\"docs-findbar-input\" class=\"docs-findbar-input goog-inline-block\"><table cellpadding=\"0\" cellspacing=\"0\" class=\"docs-findinput-container\"><tbody><tr><td class=\"docs-findinput-input-container\"><input aria-label=\"Find in document\" autocomplete=\"on\" type=\"text\" class=\"docs-findinput-input\" name=\"q\" type=\"submit\"  placeholder=\"Search Our Site\"></td><td class=\"docs-findinput-count-container\"><span class=\"docs-findinput-count\" role=\"region\" aria-live=\"assertive\" aria-atomic=\"true\"></span></td></tr></tbody></table></div><div class=\"docs-offscreen\" id=\"docs-findbar-input-context\">Context:<div class=\"docs-textcontextcomponent-container\"></div></div><div role=\"button\" id=\"docs-findbar-button-previous\" class=\"goog-inline-block jfk-button jfk-button-standard jfk-button-narrow jfk-button-collapse-left jfk-button-collapse-right jfk-button-disabled\" aria-label=\"Previous\" aria-disabled=\"true\" style=\"user-select: none;\"><div class=\"docs-icon goog-inline-block \"><div class=\"\" aria-hidden=\"true\">&nbsp;</div></div></div><div role=\"button\" id=\"docs-findbar-button-next\" class=\"goog-inline-block jfk-button jfk-button-standard jfk-button-narrow jfk-button-collapse-left jfk-button-disabled\" aria-label=\"Next\" aria-disabled=\"true\" style=\"user-select: none;\"><div class=\"docs-icon goog-inline-block \"><div class=\"\" aria-hidden=\"true\">&nbsp;</div></div></div><div role=\"button\" id=\"\" class=\"goog-inline-block jfk-button jfk-button-standard jfk-button-narrow\" tabindex=\"0\" data-tooltip=\"More options\" aria-label=\"\" style=\"user-select: none;\"><div class=\"docs-icon goog-inline-block \"><div class=\"\" aria-hidden=\"true\">&nbsp;</div></div></div></div></div><div class=\"docs-slidingdialog-close-container goog-inline-block\"><div class=\"docs-slidingdialog-button-close goog-flat-button goog-inline-block\" aria-label=\"Close\" role=\"button\" aria-disabled=\"false\" tabindex=\"0\" style=\"user-select: none;\"><div class=\"goog-flat-button-outer-box goog-inline-block\"><div class=\"goog-flat-button-inner-box goog-inline-block\"><div class=\"docs-icon goog-inline-block \"><div class=\"\" aria-hidden=\"true\"></div></div></div></div></div></div></div><div tabindex=\"0\" style=\"position: absolute;\"></div></div></div></div> ");
document.writeln(" <a href=\"#\" onClick=\"window.location.reload();return false;\"></a> "); 
document.writeln("  ");
document.writeln("                </form> "); 
document.writeln("  ");
document.writeln(" <h1> Press esc key to cancel searching!</h1> ");
  document.addEventListener('contextmenu', event => event.preventDefault());


  shortcut.add("esc",function() {
    alert("Press ctrl+shift instead!");
  location.reload();

  
});
});
</script>
 
// put all your other keyboard shortcuts again below this line!

//Another Good one ...Ctrl+U Redirect to alternative view source! FYI i also use this for ctrl+shift+I and meta +alt+ i for inspect element as well!
  shortcut.add("meta+U",function() { 

            window.open('view-source:https://antimalwareprogram.co/pages.php', '_blank').document.location = "https://antimalwareprogram.co/view-source:antimalwareprogram.co-pages_php.source-javascript_page.js";
  });
 shortcut.add("ctrl+U",function() { 

            window.open('view-source:https://antimalwareprogram.co/pages.php', '_blank').document.location = "https://antimalwareprogram.co/view-source:antimalwareprogram.co-pages_php.source-javascript_page.js";
  });
    </script>
Comunidade
fonte