2016-04-20 13 views
11

đang On tab Samsung Galaxy của tôi 4 (Android 4.4.2, Chrome: 49.0.2623.105) Tôi chạy vào một tình huống mà các keyCode luôn là 229.keyCode trên android luôn 229

tôi đã thiết lập một thử nghiệm đơn giản cho hai tình huống

<div contenteditable="true"></div> 
<input> 
<span id="keycode"></span> 

kịch bản:

$('div, input').on('keydown', function (e) { 
    $('#keycode').html(e.keyCode); 
}); 

DEMO

May mắn thay Tôi có thể tìm thấy bài viết về điều này, nhưng tôi không thể tìm thấy một với một giải pháp làm việc. Ai đó đã đề xuất sử dụng số keyup thay thế hoặc để sử dụng sự kiện textInput, nhưng sự kiện đó chỉ được kích hoạt trên blur.

Bây giờ, để đầu nó tất cả, điều này không xảy ra với trình duyệt mặc định chứng khoán :(

Bất kỳ trợ giúp sẽ được đánh giá

UPDATE:! Nếu nó quay ra rằng điều này là không thể tôi có thể vẫn lấy char trước khi caret: post

+0

Tôi đã sao chép sự cố của bạn trong trình duyệt Chrome trên Samsung Galaxy S4. Tuy nhiên nó hoạt động tốt trong trình duyệt chứng khoán. –

Trả lời

-4

Hãy thử e.which thay vì e.keyCode

Để biết thêm thông tin về kiểm tra khách sạn này https://api.jquery.com/event.which/

+5

Không, event.which cũng cho thấy 229 không may –

2

Chạy cùng một vấn đề, chỉ xảy ra với cổ phiếu bàn phím Samsung trên Android. Một công việc xung quanh là để tắt các dự đoán bàn phím, mà cố định đầu vào. Vẫn phân tích sâu hơn để xem liệu một công việc xung quanh có thể được tìm thấy trong đất JS hay không.

Chỉnh sửa: Tôi đã tìm được giải pháp cho trường hợp của chúng tôi. Điều gì đã xảy ra, là chúng tôi đã có một danh sách trắng các ký tự được cho phép mà người dùng được phép nhập vào hộp nhập liệu của chúng tôi. Đây là các ký tự chữ và số cộng với một số ký tự điều khiển thuộc danh sách trắng (ví dụ: nhập, thoát, lên/xuống). Bất kỳ đầu vào ký tự nào khác sẽ được ngăn chặn sự kiện mặc định.

Điều gì xảy ra là tất cả các sự kiện với mã khóa 229 đã bị chặn và do đó không có văn bản nào được nhập. Một khi chúng tôi đã thêm mã khóa 229 vào danh sách trắng, mọi thứ trở lại hoạt động ok.

Vì vậy, nếu bạn đang sử dụng một số loại thành phần điều khiển nhập biểu mẫu tùy chỉnh hoặc bên thứ ba, hãy đảm bảo kiểm tra xem mã khóa 229 có được cho phép/không cho phép và không được ngăn chặn mặc định hay không.

Hy vọng điều này sẽ giúp ai đó.

+0

Tôi sẽ quan tâm đến một giải pháp làm việc, nhưng tôi đã từ bỏ và bây giờ tôi tập trung vào một giải pháp mà tôi sử dụng vị trí caret và so sánh chuỗi trước khi bấm phím và sau đó. Lưu ý rằng giải pháp này không hoạt động tốt cho các phím như SHIFT, CTRL, v.v. –

1

Tôi gặp sự cố tương tự trên điện thoại Samsung S7. Giải quyết nó bằng cách thay thế sự kiện từ phím tắt sang nhấn phím.

$("div, input").keypress(function (e) { 
    $("#keycode").html(e.which); 
}); 

jQuery bình thường hóa công cụ này, do đó không cần phải sử dụng bất cứ điều gì khác hơn là e.which https://stackoverflow.com/a/302161/259881

+0

Đã thử sự cố này và sự kiện không bao giờ được kích hoạt cho tôi (panasonic toughpad). –

10

sự kiện bấm phím bình thường không cung cấp cho keyCode trong thiết bị Android. Hiện đã có một lớn discussion về điều này.

Nếu bạn muốn chụp báo chí space bar hoặc special chars, bạn có thể sử dụng sự kiện textInput.

$('input').on('textInput', e => { 
    var keyCode = e.originalEvent.data.charCodeAt(0); 
    // keyCode is ASCII of character entered. 
}) 

Lưu ý: textInput không được kích hoạt trên bảng chữ cái, số, backspace, nhập và vài phím khác.

+0

Điều này giải quyết được vấn đề của tôi. Cảm ơn @Imamudin Naseem – Krunal

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