7

インターネットで次のコードを見つけました。このソリューションを見たとき、このキー コードがすべてのブラウザで同じであるかどうか疑問に思いました。

var CalendarFilter = Backbone.View.extend({
      // ...
      events: {
        'click .filter':  'filter',
        'keypress input[type=text]': 'filterOnEnter'
      },
      filterOnEnter: function(e) {
        if (e.keyCode != 13) return;
        this.filter(e);
      },
      filter: function(e) { /* ... */ });
      }
    });

ちょっと疑問です、ありがとう。

4

4 に答える 4

6

まず第一に、でcharCodeはありませんkeyCodecharCodeは ascii セットに従いますkeyCodeが、 はキーの特定のインデックスです。2 つの値の違いは次のとおりです。下位 ASCII 文字セットのキーボード イベント文字値 - O'Reilly Answers

charCodeとの主な違いの 1 つkeyCodeは、charCode は非推奨であり、通常、一部のブラウザーでは [0 を除いて] 参照時に値がないことです。

おかしなことに、onkeypress はではなく文字コードkeyCodeを返すようですが、onkeyup と onkeydown は期待どおりに動作するため、値の検出時に問題が発生する可能性がありkeyCodeます。これは、 JavaScript - Detecting keystrokes - Additional reference: keyCode and charCodeでテストできます。

keyCodecharCodeあり、 w3c では推奨されていませんがwhich、このモデルにはまだレガシー サポートがあります。堅実なクロス ブラウザ/プラットフォーム サポートは、キーボード レイアウトに依存しない固定の仮想キーコードを使用して行われます。つまり、「仮想」です。keyCode

固定の仮想キーコード以外のその他の仮想キーコードも、ベンダー間で一貫して実装されているようです。MDN 仮想キー コード (Windows)

jQuery は、独自のkeyCode/charCodeイベント オブジェクト プロパティを使用します。.whichこれは、 と を統合しようkeyCodeとしcharCodeます。そしてkeyCode値を支持する - event.which – jQuery API

要するに、特定のkeyCode: "13" は、固定の仮想キーコードであり、すべてのブラウザーとプラットフォームと一貫性があるため、javascript をサポートするほとんどのブラウザーで動作するはずです。

于 2012-12-25T03:42:11.387 に答える
2

キーコードは標準ですが、キーコードも確認するのが最適な場合があり10ます。10は「改行」13のキーコード、は「キャリッジリターン」のキーコードです。2つの間に歴史的な違いがあります(タイプライターは両方の信号を送信する必要がありました。紙を上に移動するための「改行」と、タイプする部分を紙の左側に移動するための「キャリッジリターン」です)。

たとえば、簡単なチェックでは、WindowsのChromeでkeyCodeをCtrl送信Enterします。確認はできませんが、10一部の'nixシステムがkeyCodeを使用している可能性があります。10そしてグーグル検索はiPhoneが10を送るかもしれないことを明らかにします。他のケースも考えられます。

一部のシステムは一方を使用し、一部はもう一方を使用して改行を表します(最後に確認したところ、Windowsは両方の組み合わせを使用しています)が、現代の世界では、実際には両方を意味するEnterため、両方のベースをカバーしても問題ありません。

于 2012-12-25T02:16:27.950 に答える
1

keyCode 13(改行)には、OS間またはブラウザ間の互換性に問題はありません。心配ない。

于 2012-12-25T02:12:39.353 に答える
1

もちろん。これは、コンピュータ全体で同じです。

于 2012-12-25T02:09:13.327 に答える