37

Web サイトのカスタム検索ボックスのキーコードを検出する必要がありますが、Chrome for Android ではキーコードが常にゼロを返します (8 を返すバックスペースを除く)。他の誰かがこれを経験しましたか?どのように回避しましたか? ゼロ以外のキーコードまたは文字コードを検出できないため、Chrome for Android を除くすべてのモバイル ブラウザで Web サイトが動作します。

Android 4.1.2 Jelly Bean で Chrome 27.0.1453.90 を実行しています。この問題は、次のような単純なもので再現できます。
alert(event.keyCode);

4

10 に答える 10

18

以下の解決策も私のために働きます。他の人にも役立つかもしれません。

var getKeyCode = function (str) {
    return str.charCodeAt(str.length - 1);
}

document.getElementById("a").onkeyup = function (e) {
    var kCd = e.keyCode || e.which;
    if (kCd == 0 || kCd == 229) { //for android chrome keycode fix
        kCd = getKeyCode(this.value);
    }
    alert(kCd)
}
于 2015-05-27T13:25:20.150 に答える
3

私はこの問題に直面しましたが、これが問題を解決する方法を見つけた方法です。

  • まず、デスクトップ マシンでブラウザのログを表示できるように、Android フォンで USB デバッグを有効にする必要があります。
  • 2 番目に、携帯電話とコンソール内のデスクトップ タイプ "monitorEvents(document)" または検査したい要素で Web アプリを更新します。
  • スマートフォンで検査したいアクションを実行します。

これは、keydown イベントが、event.originalEvent.data 内の情報を含む「textInput」と呼ばれる固有のイベントによって実際に発生したことを発見した方法です。

これがあなたの時間を節約し、幸運を祈ります!

于 2015-08-27T21:27:20.433 に答える
2

SonyXperia と HTC の Android デバイスでも同じ問題に直面しました。event.keyCode()テキストフィールドからイベントで入力された文字を読み取って金額テキストフィールドを検証するハイブリッドアプリケーションを開発している keydownため、数字とドット (.) 文字のみを入力できます。試してみましたがうまくいきません。これらのデバイスでは常に 0 が返されます。後でkeyup、正規表現を使用してイベントと文字を一致させる他のソリューションを用意しました。

$("#AmountField").keyup(function (e) {

    var regex = /^[0-9\.]$/;
    var str = $(this).val();
    var subStr = str.substr(str.length - 1);
    if(!regex.test(subStr)) {

        if(str.length >0){
            $(this).val(str.substr(0, (str.length - 1)));
        }else{ 
            $(this).val();
        }

    }

});

これが、この問題に直面している人々に役立つことを願っています。幸運を。

于 2015-03-03T11:48:06.330 に答える
2

最近、 Android 4.4.4に基づいて高度にカスタマイズされた OS を搭載した中国製の Android 携帯 Meizu MX3 でこの問題が発生しました。

デフォルトのブラウザと Chrome は問題なく動作しますが、いくつかの奇妙な理由で、event.keyCodeevent.charCode、およびevent . は、他のブラウザ ( CM ブラウザや Wechat アプリの webviewなど) では常に 0 を返します。 )。

'A' や ' ' (スペース) などの入力した最後の文字をチェックすることでこれを解決し、実際の文字である 97 を返す"A".charCodeAt(0)などの charCodeAt を使用して ASCII コードに変換します。必要なコード。

しかし、この戦略を使用して可視文字の文字コードを決定することしかできません。これは、現在の必要性を満たしています。

皆さんがこれからインスピレーションを得られることを願っています。

于 2014-11-15T08:52:59.277 に答える
0

誰かがまだそれを掘り下げている場合 .問題は、androidデバイス用の在庫のSamsungキーボードに表示されます.

代わりに を使用しますonkeyup

于 2015-12-02T17:29:22.763 に答える
0

入力のタイプを tel に変更します。<input type="tel">

これにより、キーコードをログに記録できますが、バックスペースはログに記録されず、モバイルのキーボードが数字のみに強制される可能性があります。

于 2018-01-29T09:28:57.640 に答える
-1

keyCodeの代わりにcharCodeを使用する必要があります

<input type="text" onKeyPress="return funName(this,event)" />

<script language="javascript">
function funName(th,ev)
{   
   alert(ev.charCode);
}
</script>
于 2017-12-20T15:13:33.220 に答える