7

ユーザーがkeypressでevent.whichを使用して入力したものを取得し、String.fromCharCodeを使用して出力します。

ユーザータイプ: event.which
67
出力: A

数字や文字については扱うことができますが、特殊文字について話すときは、まったく異なる出力が得られます。

ユーザータイプ: -event.which
189
出力: ½

調べてみたところ、 charCodeAt関数に出くわしました。これを使用すると、特殊文字も含めて完全に出力されます。

残念ながら、ユーザーがフィールドからではなく$(document)から直接入力するため、charCodeAtを使用できません。

だから、問題は、keyPressイベントから正しいcharCodeを取得する方法はありますか?

それでも私の疑問を理解できない場合は、私はあなたをフィドルにしました=)

4

2 に答える 2

6

keypressの代わりにイベントを使用してくださいkeyup。キーコードの代わりに文字コードを報告し、キーを離したときではなく、実際の文字が入力されたときにトリガーされるため、繰り返される文字も処理します。

$('#field').focus().keypress(function(e){
  var key = e.which;
  $("#key").val(String.fromCharCode(key));
});

http://jsfiddle.net/Guffa/QCHt7/1/

編集:

どこでもキー押下をキャッチしたい場合は、ドキュメント、およびキー押下を消費する要素にイベントをフックする必要があります。たとえば、テキストボックスはキー押下を処理し、親要素にバブルアップさせません。

于 2012-05-24T20:38:00.803 に答える
2

どの文字が入力されたかではなく、どのキーが押されたかを報告するイベントであるkeyupを使用しています。代わりに、次のようにキープレスを使用する必要があります。

$(document).keyup(function(e){
    console.log(String.fromCharCode(e.which));
});

キープレスのjqueryドキュメントから:

keydownとkeyupは、どのキーが押されたかを示すコードを提供し、keypressはどの文字が入力されたかを示すことに注意してください。たとえば、小文字の「a」は、keydownおよびkeyupでは65として報告されますが、keypressでは97として報告されます。大文字の「A」は、すべてのイベントで65として報告されます。この違いがあるため、矢印キーなどの特別なキーストロークをキャッチする場合は、.keydown()または.keyup()の方が適しています。

于 2012-05-24T21:03:25.750 に答える