2012-12-27 14 views
9

Nie mogę uzyskać preventDefault() do pracy.preventDefault() przy zdarzeniu kluczowania nie działa

Oto kilka różnych odmian kod próbowałem:

Pierwsze:

$(document).keyup(function (evt) { 
    var charCode = (evt.which) ? evt.which : event.keyCode; 
    if (charCode == 192) { 
     alert('192'); 
     return false; 
    } 
}); 

drugie:

$(document).keyup(function (evt) { 
    var charCode = (evt.which) ? evt.which : event.keyCode; 
    if (charCode == 192) { 
     alert('192'); 
     evt.preventDefault(); 
    } 
}); 

trzecie:

$(document).keyup(function (evt) { 
    var charCode = (evt.which) ? evt.which : event.keyCode; 
    if (charCode == 192) { 
     alert('192'); 
     evt.preventDefault(); 
     return false; 
    } 
}); 

działa tylko alert.
Wszystko działa w Operze, ale nie w Chrome i IE Próbowano również keydown i keypress. Na keypress skrypt nie działa. $('#thetext').keydown(function(evt){}); nic nie działa.
Oto cały kod: http://bbullett.tk/test/kakey.html

Key 192 = ` 

Próbuję wstawić tekst lub symbol zamiast `

+1

Wprowadź wcięcie kodu tak, aby było czytelne. Dziękuję Ci! Który klucz to '192'?Jakie jest domyślne zachowanie po naciśnięciu tego klawisza? –

+0

Co próbujesz zrobić? Co by się stało, aby zatrzymać zdarzenie keyup? – Guffa

+0

Próbuję wstawić jakiś symbol zamiast ' –

Odpowiedz

26

Słuchanie keyup razie jest zbyt późno na wywołanie preventDefault, spróbuj słuchać keypress lub keydown zamiast .

$('input[type=text], textarea').on('keydown', function(event){ 
    if (event.which == 192) { 
     console.log('192'); 
     event.preventDefault(); 
    } 
}); 

Należy pamiętać, że jQuery normalizuje which własność i to z różnymi przeglądarkami.

http://jsfiddle.net/763ys/

+0

Nic się nie zmieniło: S –

+0

@BbullettOmsarashvili To działa dla mnie przy użyciu Firefox. – undefined

+0

Ale nie na chromie. –

0

patrz przykład pracuje tu http://jsfiddle.net/WGSvm/

We wszystkich trzech przykładach użyłeś

$(document).keyup(function (evt) { }); 

Powiedziałbym używać szczególną div id zamiast $(document).keyup(function (evt) { });

jak $("#DivIdName").keyup(function (evt) { }); , a także ściśle używać onkeypress , ponieważ jeśli użyjesz onkeyup , to już wykonał domyślne zadanie drukowania lub cokolwiek innego.

2

Używasz JQuery, który normalizuje różnice między przeglądarkami, więc wystarczy sprawdzić właściwość evt.which. Zobacz dokumentację JQuery: http://api.jquery.com/keyup/

Jak powiedzieli inni - uruchomienie klawiatury jest zbyt późne, aby zatrzymać przetwarzanie klucza. Zamiast tego użyj klawisza keydown lub keypown. http://api.jquery.com/category/events/keyboard-events/

+0

Czy wiesz jednak, jak używać keydown w przeglądarce Androida? Keydown i keypown nie są zbyt przydatne, jeśli nie działają na wszystkich platformach ... – JohnG

Powiązane problemy