2011-12-19 23 views
5

Próbuję zrobić konsolę podobną do aplikacji, więc łapię wszystkie naciśnięcia klawisza w oknie i robię z nimi powiązane rzeczy (nie ważne). Problem jest w backspace. Mam następujący kod:Catching Backspace w Chrome i Firefox jest inny

$(window).bind("keypress",function(e){ 
     var code = e.keyCode || e.which; 
     if (code == 8) { 
      a = $("#console").html(); 
      $("#console").html(a.substring(0,a.length-1)); 
      currentCommand = currentCommand.substring(0,currentCommand.length-1);   
      e.preventDefault(); 
     } 

Jednak w Firefoksie, zawartość #console zostanie usunięty, ale Chrome nie wykonuje powyższy kod. Potrzebuję kompatybilnego rozwiązania dla różnych przeglądarek. czego mi brakuje?

Ponadto:

Jeśli używam keyDown/keyup zamiast naciśnięcia klawisza, nie jestem w stanie wykryć, czy characeter była 'A' lub 'a' zawsze zwraca 'A'.

+0

Możliwy duplikat [JavaScript e.keyCode nie złapać Backspace/Del w IE] (http://stackoverflow.com/questions/4084715/javascript-e-keycode-doesnt-catch-backspace -del-in-ie) – Keelan

+0

Tak, nie jest to dokładny duplikat, ale na to pytanie udzielono odpowiedzi. – Keelan

Odpowiedz

4

Przeczytaj to. IE nie uruchamia keypress dla tych specjalnych klawiszy. Być może jest tak samo w przypadku niektórych innych przeglądarek.

Javascript e.keyCode doesn't catch Backspace/Del in IE

+0

Jeśli zrobię: \t '$ (okno) .bind ("keyDown", function (e) { \t \t kod var = e.keyCode || e.which; \t \t console.log (kod);' Zawsze dostaje mi czapki z postaciami takimi jak alwayws 65, czy naciskam A czy – Mustafa

+0

Być może możesz spróbować sprawdzić, czy naciśnięto przycisk SHIFT? Jak wyjaśniono w tym wątku: http://stackoverflow.com/questions/3125727/how-to-differeniate-capital-letters-from-lower-one-in-onkeydown-event-handler-m – Tys

+0

Nie, jestem pewien, że SHIFT nie został naciśnięty – Mustafa