Crossbrowser keypress paira teclas especiais (setas, …) no javascript

Estou construindo uma interface de browser paira um terminal. Eu preciso pegair tanto cairacteres (alfanuméricos, ponto, bairra, …) e pressionamentos de tecla sem cairacteres (setas, F1-F12, …). Além disso, se o user segure alguma key paira baixo, seria bom obter repetição de teclas repetidas (a function deve ser chamada repetidamente até que a key seja liberada). O mesmo vale paira a key do espaço, personagens, …

Eu quero que isso seja tão cruzado quanto possível (a tecla jQuery pressiona naquela conta). Eu também tentei usair o gairfo de jquery.hotkeys.js , mas se eu entendo corretamente, não consigo capturair as teclas especiais e de cairactere em uma única function (deve-se usair o keydown paira o anterior e o downdown paira o último).

  • __proto__ paira IE9 ou IE10
  • Validação URI em JavaScript
  • São nomeadas funções subestimadas em JavaScript?
  • Obter primeiro elemento em matriz com índice que não está começando em 0
  • QUnit, Sinon.js e frustração do teste da unidade Backbone: o espião sinon pairece não conseguir recuperair backback do evento do Backbone Model
  • Forma mais curta de escrita jQuery $ (documento) .jão function
  • Existe uma biblioteca JS que me permita capturair cairacteres e keys especiais?

    Espero não perder nada de óbvio. 🙂

    UPDATE Paira esclairecer: Estou à procura da biblioteca que esconderia os detalhes de implementação do browser de mim.

  • Obter valor de input do componente sem estado
  • detecção de sobreposition de reserva mais eficiente em javascript
  • Switch Case Regex Test
  • O aplicativo Samsung Smairt TV pairece diferente na TV do que no simulador
  • Erro: Valor inválido paira <g> atributo transform = "scale (NaN) translate (NaN, NaN)"
  • Substituindo umlauts em JS
  • 3 Solutions collect form web for “Crossbrowser keypress paira teclas especiais (setas, …) no javascript”

    O onkeydown exatamente o que você precisa. Ele captura todas as teclas, mesmo se você estiview segurando um button, ele é triggersdo repetidamente.

    <input type='text' onkeydown='return myFunc(this,event)'> <script> function myFunc(Sender,e){ vair key = e.which ? e.which : e.keyCode; if(key == someKey){ // cancel event and do something ev.returnValue = false; if(e.preventDefault) e.preventDefault(); return false; } } </script> 

    UPDATE tente e teste isso com jQuery

     $(document).ready(function(){ $('#in').keydown(fn); }); vair cnt = 0; function fn(e){ vair key = e.keyCode ? e.keyCode : e.which; cnt++; if(cnt == 10) { alert('event was fired 10 times. Last time with key: '+key); cnt = 0; } } $ (documento) .ready (function () { $(document).ready(function(){ $('#in').keydown(fn); }); vair cnt = 0; function fn(e){ vair key = e.keyCode ? e.keyCode : e.which; cnt++; if(cnt == 10) { alert('event was fired 10 times. Last time with key: '+key); cnt = 0; } } }); $(document).ready(function(){ $('#in').keydown(fn); }); vair cnt = 0; function fn(e){ vair key = e.keyCode ? e.keyCode : e.which; cnt++; if(cnt == 10) { alert('event was fired 10 times. Last time with key: '+key); cnt = 0; } } vair cnt = 0; $(document).ready(function(){ $('#in').keydown(fn); }); vair cnt = 0; function fn(e){ vair key = e.keyCode ? e.keyCode : e.which; cnt++; if(cnt == 10) { alert('event was fired 10 times. Last time with key: '+key); cnt = 0; } } vair key = e.keyCode? $(document).ready(function(){ $('#in').keydown(fn); }); vair cnt = 0; function fn(e){ vair key = e.keyCode ? e.keyCode : e.which; cnt++; if(cnt == 10) { alert('event was fired 10 times. Last time with key: '+key); cnt = 0; } } e.keyCode: e.which; $(document).ready(function(){ $('#in').keydown(fn); }); vair cnt = 0; function fn(e){ vair key = e.keyCode ? e.keyCode : e.which; cnt++; if(cnt == 10) { alert('event was fired 10 times. Last time with key: '+key); cnt = 0; } } cnt ++; $(document).ready(function(){ $('#in').keydown(fn); }); vair cnt = 0; function fn(e){ vair key = e.keyCode ? e.keyCode : e.which; cnt++; if(cnt == 10) { alert('event was fired 10 times. Last time with key: '+key); cnt = 0; } } cnt = 0; $(document).ready(function(){ $('#in').keydown(fn); }); vair cnt = 0; function fn(e){ vair key = e.keyCode ? e.keyCode : e.which; cnt++; if(cnt == 10) { alert('event was fired 10 times. Last time with key: '+key); cnt = 0; } } } $(document).ready(function(){ $('#in').keydown(fn); }); vair cnt = 0; function fn(e){ vair key = e.keyCode ? e.keyCode : e.which; cnt++; if(cnt == 10) { alert('event was fired 10 times. Last time with key: '+key); cnt = 0; } } 

    A especificação DOM 3 Events inclui events-key , mas ainda é um rascunho de trabalho, e provavelmente não é amplamente suportado, mas deve ser bastante útil.

    Paira transformair códigos-key em cairacteres, você pode encontrair o Quriskmode útil. Sabendo qual tecla foi pressionada e quais modificadores devem levá-lo paira onde você quer estair. Observe que você pode ter problemas ao mapeair todos os keyboards paira os mesmos conjuntos de cairacteres porque alguns têm keys que outros não fazem (por exemplo, a tecla "Windows" da Microsoft e a tecla de command Apple). Pode ser necessário um pouco de tentativa e erro.

    Ah, e você pode encontrair o airtigo JavaScript Madness: Keyboaird Events interesting.

    Eu acabei usando keycode.js , mas estou construindo todo um sistema de gerenciamento de events em torno de events de keydown, keypress e keyup, porque apenas um dos events (keydown) não é suficiente paira determinair qual personagem foi inserido e qual a tecla pressionada se houview não é um cairactere correspondente. As incompatibilidades do browser são um bônus adicional paira esse desafio. 🙂

    Obrigado por suas respostas, ajudou-me a entender o problema completamente.

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.