19

「プレースホルダー」ポリフィルに似たものを書き込もうとしています。入力フィールドでキーアップイベントをキャッチし、ユーザーが入力した文字を取得したいので、次のコードを使用します。

 $elem.on('keyup',function(e){  
    var $this = $(this),    
        val = $this.val(),
        code = (e.keyCode ? e.keyCode : e.which);
    console.log(String.fromCharCode(code));

});

問題は、これが常に押された文字の大文字バージョンを返すことです。押された文字が大文字か小文字かをどうやって知ることができますか?

押された文字が表示されることは知ってkeypressいますが、すべてのキー押下イベント(バックスペースなど)でアクティブになるわけではありません。

4

4 に答える 4

14

keyupは、入力されている文字ではなく、押されているキーのみを認識しているため、keyupからこの情報を簡単に取得することはできません。Shiftキーが下がっていることを確認したり、Caps Lockを自分で追跡したりすることもできますが、誰かがブラウザの外でそれを押すと、大文字と小文字が間違って表示されることになります。

キープレスイベントを試すことができます。、jQueryは報告しますが、常に同じクロスブラウザで動作するとは限りません。ドキュメントから:

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

于 2012-09-24T15:58:01.653 に答える
4

keyup追加の条件(この場合は小文字/大文字の場合)ではなく、押されているキーのみを認識します。代わりにイベントを試してくださいkeypress(例としてドキュメントを使用して説明しました-必要な要素に変更してください)

例えば:

<script type="text/javascript">

$(document).on('keypress',function(e) {  
    var $this = $(this),    
        val = $this.val(),
        code = e.keyCode || e.which;
    console.log(String.fromCharCode(code));
});

</script>
于 2012-09-24T16:00:36.633 に答える
2

文字コードにアクセスできるように、キープレスでキーイベントをキャプチャする必要があります。Capslock / Shift +キーストロークを検出したい場合でも、2つの別々のキーストロークとして登録されるため、大文字と小文字を判別するのが困難になります。

いくつかの重要なKeyCodeノート:

「onkeydownまたはonkeyupイベント中にkeyCodeプロパティにアクセスするときは注意してください。これは、「Shift」などの非文字キーを含む任意のキーが押されるたびに設定されるためです。これは、「Shift+a」を押して取得しようとした場合を意味します。 「A」のkeyCodeの場合、代わりに常に2つのkeyCodeが取得されます。1つは「Shift」用、もう1つは「A」用です。これに関係なく取得されるのは「a」のkeyCodeです。文字の大文字バージョンのUnicode値を返します。「a」(小文字)のkeyCodeを導出するには、IEのonkeypressイベント中に返されたkeyCodeをプローブする必要があります。また、Firefoxはonkeypress中にkeyCodeを設定しないため、に切り替えます。そのブラウザの代わりにe.charCodeまたはe.which。」

いくつかの重要なCharCodeノート:

"onkeypressイベント中に押されたキーの文字コードを返します。これは、文字が関連付けられているキー(つまり、「a」、「b」、または「z」)にのみ設定されます。文字が関連付けられていないキー。 「Shift」や「Ctrl」などは修飾されません。その他のポイント:-大文字と小文字で異なる値が返されます(つまり、「a」と「A」)。

これは、2つの引用が由来する優れた情報源であり、さらに混乱する可能性があります。

キーコードと文字コード

于 2012-09-24T16:05:13.850 に答える
0

keypressイベントでcharcodeを取得でき、「backspace」、「insert」などの場合は、keydownskeyCodeプロパティを使用できます。

于 2012-09-24T16:00:00.990 に答える