web-dev-qa-db-ja.com

keypressイベントはIEおよびChromeでは機能しませんが、FFでは機能します

なぜこれが起こるのか考えていますか?私は通常、Chromeはコードに対してより寛容であると思いますか?

$(document).keypress(function(e) {
    if(e.keyCode == 39) rightImage();
    if(e.keyCode == 37) leftImage();
});

それが私のキープレスキーの外観です。何か不足していますか? rightImage();およびleftImage();私が他の場所でもそれらの関数を使用している場合に機能するはずの関数です

助けてくれてありがとう!

16
hellomello

keypresskeydownに変更します。

$(document).keydown(function(e) {
    if(e.keyCode == 39) rightImage();
    if(e.keyCode == 37) leftImage();
});

キーダウンイベントは、キーが押されたときに発生し、直後にキープレスイベントが続きます。次に、キーが離されると、キーアップイベントが生成されます。

キーダウンとキープレスの違いを理解するには、「文字」と「キー」の違いを理解しておくと便利です。 「キー」はコンピューターのキーボード上の物理的なボタンであり、「文字」はボタンを押して入力する記号です。理論的には、keydownイベントとkeyupイベントは押されたキーまたは離されたキーを表し、keypressイベントは入力された文字を表します。理論の実装は、すべてのブラウザで同じではありません。

39
jao

ここで答えが見つかりました: http://api.jquery.com/keypress/

「Chromeで矢印、削除、バックスペースキーを使用したい場合は、keydownを使用する必要があります。これらのキーのkeypressは、FirefoxとOperaでのみ機能します。」

あなたのコードはiE8(FFで動作)では機能しなかったので、キープレスをキーダウンに切り替えました。 IEになりました。テストするChromeはありません。

3
AR.

はい、これはonkeypressイベントをonkeydownに変更することで実現できます。さらに、この問題は、スペースクリックでイベントをトリガーしたいInternet Explorerの場合にのみ発生します。

0
Vivek Singh