2011-02-08 16 views
26

Nie wydaje się, że po naciśnięciu klawisza Backspace naciśnięto klawisze jQuery, keydown lub keypress. Jak zatrzymałbym naciśnięcie klawisza Backspace?Jak złapać klucz Backspace za pomocą jQuery?

+0

Aby wyjaśnić, chcę pułapkę po naciśnięciu klawisza Backspace i wykonać akcję. Zmieniam stan niektórych przycisków na stronie po usunięciu ostatniego znaku z pola tekstowego. Dlatego nadal chcę, aby klawisz Backspace wykonywał normalne działanie. – ChrisP

+1

To nie prawda. Pojawia się w metodach keyup i keydown. Tylko nie pojawia się w naciśnięciu klawisza. – Line

+0

@RickSmith Nie zgadzam się. Pytanie, do którego się odnosiłeś, dotyczyło JavaScript, podczas gdy OP tutaj pyta w jQuery. Może istnieć jakiś powód, dla którego ktoś chciałby uzyskać odpowiedź w ten czy inny sposób. –

Odpowiedz

61

spróbować tego:

$('html').keyup(function(e){if(e.keyCode == 8)alert('backspace trapped')}) 
+16

sprawdź także 46 (usuń) – andufo

+0

Działa, ale nie możesz w ten sposób pokazać okna modalnego i przestać wracać do poprzedniej strony. –

+1

Wypróbuj e.preventDefault(), A NASTĘPNIE spraw, aby to było nieprzyjemne :) –

10

Do zatrzymania klawisza Backspace można użyć normalnego javascriptu. Możesz użyć metody event.keyCode. Kod dostępu jest 8, więc kod będzie wyglądał mniej więcej tak:

if (event.keyCode == 8) { 
    // Do stuff... 
} 

Jeśli chcesz sprawdzić zarówno dla [usunięcia] (46), jak również [Backspace] (8) klawisze, użyj następujących :

if (event.keyCode == 8 || event.keyCode == 46) { 
    // Do stuff... 
} 
3

Działa na tej samej idei, jak wyżej, ale uogólniając trochę. Ponieważ backspace powinien działać poprawnie na elementach wejściowych, ale nie powinien działać, jeśli fokus jest akapitem lub czymś, ponieważ jest tam, gdzie strona ma tendencję do powrotu do poprzedniej strony w historii.

$('html').on('keydown' , function(event) { 

     if(! $(event.target).is('input')) { 
      console.log(event.which); 
      //event.preventDefault(); 
      if(event.which == 8) { 
      // alert('backspace pressed'); 
      return false; 
     } 
     } 
}); 

return false => oba zdarzenia.preventDefault i event.stopPropagation są aktywne.

+0

upvote dla Keydown zamiast keyup. –

3

Domyślnym zachowaniem backspace w większości przeglądarek jest powrót do poprzedniej strony. Jeśli nie chcesz, aby nie tego zachowania, upewnij się, że połączenie preventDefault(). Jednakże, jak nawiązywał do OP, jeśli zawsze nazywasz to preventDefault(), uniemożliwisz również usuwanie rzeczy w polach tekstowych. Poniższy kod ma rozwiązanie dostosowane od this answer.

Ponadto, zamiast używać zakodowanych na klucz wartości keyCode (niektóre wartości zmieniają się w zależności od przeglądarki, chociaż nie jest to prawdą w przypadku Backspace lub Delete), jQuery has keyCode constants już zdefiniowano. Dzięki temu Twój kod staje się bardziej czytelny i dba o wszelkie niespójności kluczy kluczowych.

+0

To obsługuje większość przypadków, ale chcę zapobiec ponownemu włączeniu Wybierz i na niektórych typach wejść, takich jak radio lub pole wyboru, więc usunąłem "SELECT" i dodałem test na 'e.target.type'. Do tej pory mam te typy wejściowe 'var rxt =/radio | button | checkbox | image | reset | submit/i;' Kolor może być także jednym z wykluczeń, ale może to być specyficzne dla przeglądarki. – peater

Powiązane problemy