Samsung Galaxyタブ4(Android 4.4.2、Chrome:49.0.2623.105)で、keyCodeが常に229である状況に遭遇しました。
2つの状況の簡単なテストをセットアップしました
<div contenteditable="true"></div>
<input>
<span id="keycode"></span>
脚本:
$('div, input').on('keydown', function (e) {
$('#keycode').html(e.keyCode);
});
幸いなことに、これに関する投稿を見つけることができますが、実用的なソリューションを見つけることができませんでした。代わりにkeyup
を使用するか、textInput
イベントを使用するように提案されましたが、そのイベントはblur
でのみ起動されます。
さて、それをすべて上にするには、これはデフォルトのストックブラウザでは起こりません:(
助けていただければ幸いです!
更新:これが不可能であることが判明した場合、キャレットの前に文字を取得することができます: post
通常のkeypressイベントでは、Androidデバイス。これには既に大きな discussion があります。
space bar
またはspecial chars
の押下をキャプチャする場合は、textInput
イベントを使用できます。
$('input').on('textInput', e => {
var keyCode = e.originalEvent.data.charCodeAt(0);
// keyCode is ASCII of character entered.
})
注:textInput
は、アルファベット、数字、バックスペース、エンターなどのいくつかのキーではトリガーされません。
同じ問題があり、解決策が見つかりませんでした。 javascriptを使用して解決しました。
event.target.value.charAt(event.target.selectionStart-1).charCodeAt()
同じ問題が発生するのは、Androidのサムスン製キーボードでのみ発生します。回避策は、キーボードの予測をオフにして、入力を修正することでした。さらに分析して、回避策がJSランドで見つかるかどうかを確認します。
編集:私たちのケースの解決策を見つけることができました。起こっていたことは、ユーザーが入力ボックスに入力できる許可された文字のホワイトリストがあったことです。これらは、英数字といくつかのホワイトリストに登録された制御文字(たとえば、enter、esc、up/down)でした。その他の文字入力では、イベントのデフォルトが防止されます。
発生したのは、キーコード229を持つすべてのイベントが防止され、その結果、テキストが入力されなかったことです。キーコード229もホワイトリストに追加すると、すべてが正常に機能するようになりました。
そのため、何らかのカスタムまたはサードパーティのフォーム入力制御コンポーネントを使用している場合は、キーコード229がホワイトリスト/許可されており、デフォルトで防止されていないことを確認してください。
これが誰かを助けることを願っています。
Samsung S7の携帯電話でも同じ問題が発生していました。イベントをキーダウンからkeypressに置き換えることで解決しました。
$("div, input").keypress(function (e) {
$("#keycode").html(e.which);
});
jQueryはこのようなものを正規化するため、e.which https://stackoverflow.com/a/302161/259881 以外を使用する必要はありません。
古い投稿に回答していることは知っていますが、この問題はまだ続いているので、意見を共有したいと思います。
ただし、この方法は正確な解決策ではなく、私が持っていた緊急性の解決策にすぎません。
キーは、キーを押しながらテキストボックスの値を使用することです。キーを押すたびに値が変更され、最後の値の更新によって、どのキーが押されたかを確認できます。
注:これはキーボード上の表示フォント、つまり英数字と特殊文字に対してのみ機能します。あなたが知っている
$('input').keyup(function () {
var keyChar = $(this).val().substr(-1);
//you can do anything if you are looking to do something with the visible font characters
});