2016-04-20 27 views
11

在我的三星Galaxy Tab 4(是Android 4.4.2,Chrome瀏覽器:49.0.2623.105)我碰到的情況下鍵代碼始終是229鍵代碼在Android上始終是229

我設置一個簡單的測試兩種情況

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

腳本:

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

DEMO

幸運我可以找到關於此的帖子,但我找不到有工作解決方案的帖子。有人建議使用keyup代替或使用textInput事件,但只有在blur上纔會觸發該事件。

現在,最糟糕的是,這並不默認瀏覽器的股票:(

任何幫助,將不勝感激發生

UPDATE:如果事實證明,這是不可能的,我可以還是搶字符插入符之前:post

+0

我在Samsung Galaxy S4的Chrome瀏覽器中複製了您的問題。但它在股票瀏覽器中工作正常。 –

回答

2

遇到同樣的問題,只會發生在Android上的股票三星鍵盤。解決辦法是關閉固定輸入的鍵盤預測。進一步分析是否可以在JS土地找到解決辦法。

編輯:我已經設法爲我們的案件找到解決方案。發生的是,我們有一個允許用戶被允許進入我們輸入框的允許字符的白名單。這些是字母數字字符以及一些白名單控制字符(例如,enter,esc,上/下)。任何其他字符輸入都會阻止事件默認。

發生了什麼事情是,所有使用鍵碼229的事件都被阻止,結果沒有輸入文本。一旦我們將密碼229添加到白名單中,一切都恢復正常。

因此,如果您使用某種自定義或第三方表單輸入控件組件,請確保檢查鍵碼229已被列入白名單/允許且未被默認阻止。

希望這可以幫助別人。

+0

我會對一個工作解決方案感興趣,但我放棄了,現在我正在關注一個解決方案,在該解決方案中使用插入位置並在按鍵之前和之後比較字符串。請注意,這種解決方案不適用於像SHIFT,CTRL等鍵 –

1

我在三星S7手機上遇到同樣的問題。通過從keydown替換事件解決它到按鍵

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

jQuery的正常化這個東西,所以沒有必要使用以外的任何其他e.which https://stackoverflow.com/a/302161/259881

+0

嘗試了這一點,事件從未爲我開火(panasonic toughpad)。 –

10

普通按鍵事件並沒有給密鑰代碼的Android設備。這已經是一個大的discussion

如果要捕獲space barspecial chars的新聞,可以使用textInput事件。

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

注:textInput不會被觸發字母,數字,退格鍵,進入和一些其它的鍵。

+0

這解決了我的問題。謝謝@Imamudin Naseem – Krunal

相關問題