13

Web インターフェイスに文字を入力するために使用されるバーコード スキャナーで、文字コードの問題が発生しています。

バーコードに - (ダッシュ/ハイフン/マイナス) などの記号が含まれている場合、多くの文字セットで正しい文字コード 189 が返されます。実際、スキャンを行うときにテキスト入力を選択すると、予想どおり - 文字が入力されます。ただし、グローバル ドキュメントから keypress または keyup イベントをインターセプトし、fromCharCode() 関数を使用して自分で文字列を作成すると、ブラウザに処理させるのではなく、もちろん 189 の Unicode 変換である ½ 文字を取得します。コード。

イベント自体では、keyCode と "which" の両方が 189 として表示されますが、keyIdentifier は "U+00BD" です。残念ながら、本当に必要な charCode 値は常に 0 です。

もちろん、この変換を手動で約 5 秒で処理できます。問題は、スキャナーから取得する可能性のあるコードの完全なセットがわからないことと、未処理の文字が数週間または数か月後に表示されて頭痛の種になることを心配していることです. または、生の文字コードをサーバーにアップロードして、PHP で処理することもできます。ただし、タイミングと応答性の理由から、クライアントで処理することをお勧めします。目に見えないテキスト入力に偽のキー押下を送信することもおそらく機能しますが、それは本当にハックな回避策です。

これを行うためのより良い方法があるはずであり、明らかな何かが欠けている必要があるようです。誰にもアイデアはありますか?

4

3 に答える 3

5

キーコードを取得して を使用してキーボード処理をインターセプトし、それらを文字として解釈するとfromCharCode、間違った結果が得られます。キーの押下に関連付けられる文字は、キーボード ドライバーによって異なります。

したがって、傍受ルーチンは、キーボードのキー割り当てを知る必要があります。一般的なWindows キーコードを出発点として使用することもできますが、その場合、ソフトウェアはシステムに依存します。

于 2013-10-09T17:36:34.040 に答える
2

keypress信頼できるキャラクター情報を得るには、イベントを使用する必要があります。すべてのブラウザは、文字コードをイベントのwhichプロパティに保存します。IE8以下を除き、keyCodeプロパティに文字コードを格納します。

したがって、特定のkeypressイベントの適切な文字コードを取得するには、次を使用します。

document.addEventListener('keypress', function (event) {
    // Get the proper character code
    var charCode = (typeof event.which === 'number') ? event.which : event.keyCode;

    // Do stuff
});

about:blank新しいタブを開き、それをポイントして、開発者ツール コンソールに次のように入力することで、結果を簡単にテストできます。

document.addEventListener('keypress', function (event) {
    // Get the proper character code
    var charCode = (typeof event.which === 'number') ? event.which : event.keyCode;

    console.log('charCode = ' + charCode);
    console.log('fromCharCode returns ' + String.fromCharCode(charCode));
});

ダッシュを入力したときの出力:

charCode = 45
fromCharCode returns -

keyupこれをイベントの観察と比較してください。上記の例をkeyupイベントをリッスンするように変更すると、ダッシュの出力は次のようになります。

charCode = 189
fromCharCode returns ½

これはあなたが働くことができるものですか?キーボード イベントを操作することの恐ろしさについて詳しく知りたい場合は、このテーマに関するすばらしい記事をご覧ください。

于 2015-12-16T12:49:32.777 に答える