2012-02-15 9 views
10

Poniższy kod działa idealnie w przeglądarce Chrome, Firefox, na telefonie iPhone, a nawet w przeglądarkach innych firm na Androida. Jednak po uruchomieniu w natywnym kluczu przeglądarki zdarzenia dla znaków specjalnych, takich jak Å, Ę i Ö na mojej szwedzkiej klawiaturze, po prostu nie są wyzwalane.Brak zdarzeń związanych z naciśnięciem klawisza dla niektórych klawiszy w przeglądarce Androida

Przykład powinien zezwalać użytkownikowi na wprowadzanie pojedynczego znaku na raz. Działa jak zaklęcie, chyba że w Androidzie naciskam klawisze takie jak Å, Ę lub Ö, dla których mogę wprowadzić dowolną liczbę znaków.

Oto jsFiddle dla każdego, kto chce go wypróbować: http://jsfiddle.net/x7H6f/. Jeśli nie masz specjalnych klawiszy, takich jak moje szwedzkie wydrukowane na klawiaturze, postacie takie jak é (przytrzymaj E) powinny wykonać "sztuczkę".

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Key Event test</title> 
    </head> 
    <body> 
     <input type="text" id="a" name="test" /> 
     <script> 
      document.getElementById("a").onkeypress = function(e) { 
       e = e || window.event; 
       var k = e.keyCode || e.which; 
       this.value = String.fromCharCode(k); 
       return false; 
     } 
     </script> 
    </body> 
</html> 

I nie, keydown i keyup również nie działają. Czy coś przeoczyłem, czy to błąd? To strasznie denerwujące podczas opracowywania szwedzkich aplikacji w PhoneGap!

Dzięki!


EDIT: Jak Manor mówi w swej odpowiedzi, zdarzenie input mogą być użyte. Oto skrzypce, które demonstrują różnice między zdarzeniami keypress, input i change: http://jsfiddle.net/Qxd76/ (użyj (użyj http://jsfiddle.net/Qxd76/show, aby wyświetlić wynik na smartfonie).

+0

Im przeżywa to samo, to prawdopodobnie błąd w android? – rapadura

+0

Jestem przyzwoicie pewien, że to błąd w rodzimej przeglądarce dla Androida, którego używają przeglądarki. Nie potwierdziłem tego, ale podejrzewam, że powinno to zostać rozwiązane po wersji 4, ponieważ po tym zmieniły one przeglądarkę na chrome? – Zut

+0

@rapadura @Zut '' input'' event nie zwraca '' keyCode'' lub '' which'' lub '' charCode'' .. – Kosmetika

Odpowiedz

9

Właśnie spędziłem mnóstwo czasu na temat tego problemu. Rozwijam się na hebrajski i wszystkie hebrajskie karty nie są dla mnie wydarzeniem.

znalazłem rozwiązanie i dam za to krótko wyjaśnić przed

kiedy wykorzystać wszystkie najważniejsze wydarzenia poszukiwanie przeglądarka klucza jesteś naciskając na. ponieważ z jakiegoś powodu wszystkie czartery w innym języku z angielskiego w rodzimej przeglądarce Androida są nieznane i dlatego nie jest wywoływane żadne zdarzenie po wypełnieniu karty wejściowej.

rozwiązaniem jest wyszukiwanie zdarzenia na wejściu, a nie na klawiszu. na przykład, jeśli mamy do czynienia z tekstem, metoda .change() będzie dla nas świetna.

Używam metody addEventListener() i działa jak charm.

jest to kod

var exmpleInput = document.getElementById('input-id'); 
if(exmpleInput) { 
    exmpleInput.addEventListener("input", function() { 
     exampleFunction(this) 
    }, false); 
} 
+0

Zdarzenie wejściowe działa idealnie! Chociaż zdarzenie zmiany zostanie uruchomione tylko wtedy, gdy wejście straci ostrość i nie będzie mogło być używane zgodnie z opisem w pytaniu. – Zut

+0

Uratowałem mój dzień !!! – Lentyai

Powiązane problemy