2012-02-15 39 views
10

Mã dưới đây hoạt động hoàn hảo trong Chrome, Firefox, trên IPhone và thậm chí cả trong trình duyệt của bên thứ ba trên Android. Tuy nhiên, khi chạy trong các sự kiện chính của trình duyệt gốc đối với các ký tự đặc biệt như Å, Ä và Ö trên bàn phím tiếng Thụy Điển của tôi thì không được kích hoạt.Không có sự kiện nhấn phím nào cho các phím nhất định trong trình duyệt Android

Ví dụ chỉ nên cho phép người dùng nhập một ký tự cùng một lúc. Hoạt động như một nét duyên dáng, trừ khi tôi sử dụng các phím bấm android như Å, Ä hoặc Ö để tôi có thể nhập bất kỳ số ký tự nào.

Đây là một jsFiddle dành cho bất kỳ ai muốn dùng thử: http://jsfiddle.net/x7H6f/. Nếu bạn không có các phím đặc biệt như các phím tiếng Thụy Điển của tôi được in trên bàn phím của bạn, các ký tự như é (giữ E) sẽ thực hiện "mẹo".

<!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> 

Và không, phím tắt và khóa không hoạt động. Tôi đã bỏ lỡ một cái gì đó, hoặc là một lỗi này? Thật khủng khiếp khi phát triển các ứng dụng Thụy Điển trong PhoneGap!

Cảm ơn!


EDIT: Như Manor nói trong câu trả lời của ông, sự kiện input có thể được sử dụng. Dưới đây là một fiddle thể hiện sự khác biệt giữa các sự kiện keypress, inputchange sự kiện: http://jsfiddle.net/Qxd76/ (sử dụng http://jsfiddle.net/Qxd76/show để xem kết quả trên điện thoại thông minh).

+0

Im trải qua những điều tương tự, điều này có lẽ là một lỗi trong Android? – rapadura

+0

Tôi chắc chắn đó là một lỗi trong trình duyệt gốc dành cho Android, đó là những gì các trang web đang sử dụng. Tôi đã không xác nhận nó, nhưng tôi nghi ngờ nó nên được giải quyết sau phiên bản 4, vì họ đã thay đổi trình duyệt để chrome sau đó? – Zut

+0

@rapadura @Zut '' input'' không trả về '' keyCode'' hoặc '' which'' hoặc '' charCode'' .. – Kosmetika

Trả lời

9

tôi chỉ dành nhiều thời gian cho vấn đề này. Tôi đang phát triển để chơi và tất cả các điều lệ viên hebrew không phải là sự kiện cho tôi.

tôi tìm thấy giải pháp và tôi sẽ cung cấp cho cho nó ngắn giải thích trước

khi sử dụng tất cả các sự kiện quan trọng việc tìm kiếm trình duyệt cho phím bạn nhấn cho. gây ra một số lý do tất cả các điều lệ trong ngôn ngữ khác từ tiếng Anh trong trình duyệt bản địa android là không rõ và đây là lý do tại sao không cháy bất kỳ sự kiện khi bạn điền vào điều lệ đầu vào.

giải pháp là tìm kiếm sự kiện trong đầu vào chứ không phải trên khóa. ví dụ nếu chúng ta có trong phương thức nhập văn bản .change() sẽ rất tuyệt vời cho chúng ta.

Tôi đang sử dụng phương thức addEventListener() và đang hoạt động như một nét duyên dáng.

này là mã

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

Sự kiện đầu vào hoạt động hoàn hảo! Mặc dù sự kiện thay đổi sẽ chỉ kích hoạt khi đầu vào mất tiêu điểm và không thể sử dụng như được mô tả trong câu hỏi. – Zut

+0

Đã lưu ngày của tôi !!! – Lentyai

Các vấn đề liên quan