2009-09-18 2 views
48

なぜ人々は、一部の人々はまた、e.whichキーコードとCHARCODE

を使用

e.keyCode ? e.keyCode : e.charCode 
のような文を書くのですが、誰かが説明していただけますか?

答えて

9

条件文です。

ブラウザがe.keyCodeをサポートしている場合は、e.keyCodeとe.charCodeの両方を使用します。

それは

var code = event.keyCode || event.charCode 

event.keyCodeに似ています:KeyPressイベントでの非文字キーやキーボードイベントの他のタイプのいずれかのキーのUnicode値を返します。

event.charCode:キー押しイベント中に押された文字キーのUnicode値を返します。

+9

これは1ライナーとして記述できます: 'var keyCode = event.keyCode || event.charCode'である。 – davidchambers

4

keyCode。数値の形式で押された実際のキーボードキーを表します。どちらの理由も存在するのは、Internet Explorer内でkeyCodeが利用可能で、FireFoxのようなW3Cブラウザで利用できるからです。

charCodeは似ていますが、この場合、押された文字のUnicode値を取得します。たとえば、文字「A」。

JavaScript式:

var keyCode = e.keyCode ? e.keyCode : e.charCode; 

は基本的に以下の言葉:

e.keyCodeプロパティが存在する場合は、その値を変数キーコードを設定します。それ以外の場合は、変数keyCodeをe.charCodeプロパティの値に設定します。

通常、keyCodeまたはcharCodeプロパティを取得するには、IEおよびW3Cのイベントモデルの違いを把握する必要があります。

/* 
get the event object: either window.event for IE 
or the parameter e for other browsers 
*/ 
var evt = window.event ? window.event : e; 
/* 
get the numeric value of the key pressed: either 
event.keyCode for IE for e.which for other browsers 
*/ 
var keyCode = evt.keyCode ? evt.keyCode : e.which; 

EDIT:TorのHaugenののコメントどおりcharCodeはの私の説明の訂正次のようなコードを書くいくつかのことを必要とします。

+0

e.charCodeは*テキストではありません。文字の(数字の)ユニコード値を返します。それはkeyCodeと異なり、例えばAとaに対して異なる値を持つ(すなわち、シフトが押されているかどうか)。 –

+0

@Tor:訂正していただきありがとうございます。私は答えを編集しました。 –

93

キーイベントを一貫して処理するのは簡単ではありません。

最初に、2つの異なるタイプのコードがあります:キーボードコード(ユーザーが押したキーボードのキーを表す数字)と文字コード(Unicode文字を表す数字)です。文字コードは、keypressイベントでのみ確実に取得できます。 keyupと​​イベントの文字コードを取得しようとしないでください。

第2に、keypressイベントでは、keyupまたは​​イベントで取得した値とは異なる値を取得します。

私は有用なリソースとしてthis pageをお勧めします。要約として:

ユーザーが文字を入力したことを検出するには、keypressイベントを使用してください。IEは奇妙にしか文字コードをkeyCodeに保存しますが、他のすべてのブラウザはwhichに保存します。一部のブラウザ(すべてではありません)は、charCodeおよび/またはkeyCodeにも保存されます。例えば、キー押下ハンドラ:

function(evt) { 
    evt = evt || window.event; 
    var charCode = evt.which || evt.keyCode; 
    var charStr = String.fromCharCode(charCode); 
    alert(charStr); 
} 

あなたは(たとえば、カーソルキーなど)非印字可能キーを検出するに興味があるなら、​​イベントを使用します。ここではkeyCodeは常に使用するプロパティです。 keyupイベントには同じプロパティがあります。

function(evt) { 
    evt = evt || window.event; 
    var keyCode = evt.keyCode; 

    // Check for left arrow key 
    if (keyCode == 37) { 
    alert("Left arrow"); 
    } 
} 
+0

ありがとう、素敵な情報:D –

+0

サー...なぜ私たちは使用するか.... evt.which || evt.keyCode ...なぜかe.which ...本質的にe.が押されたキーのkeyCodeまたは英数字キーの文字コードが押されたとき。 –

+2

@bhavya_w:文字コードを 'keyCode'に格納し、' which'プロパティをサポートしない古いバージョンのInternet Explorer(バージョン8以前)をサポートします。詳細については、http://unixpapa.com/js/key.htmlを参照してください。 –

-2

ブラウザの違いを避けるためにjQueryを使用すると、event.whichプロパティが追加されます。 See docs

jQueryを使用していない場合、whichプロパティは未定義です。

+3

'event.which'は実際にはNetscape 4の時代の旧式のプロパティであり、最新のブラウザでは(まだ廃止されていますが)利用可能です。 jQueryは、単にそれ自身のイベントオブジェクトに同じ名前を採用しました。 – MrWhite

2

ここで説明します。

e.keyCode - キーボードのキーを表す数値を取得するために使用

e.charCode - キーボード

EのキーのUnicode文字を表す番号.which - (jQuery固有)は、jQueryで導入されたプロパティです(平易なjavascriptでは使用しないでください)

以下は、keyCodeとcharCodeを取得するためのコードスニペットです

<script> 
// get key code 
function getKey(event) { 
    event = event || window.event; 
    var keyCode = event.which || event.keyCode; 
    alert(keyCode); 
} 

// get char code 
function getChar(event) { 
    event = event || window.event; 
    var keyCode = event.which || event.keyCode; 
    var typedChar = String.fromCharCode(keyCode); 
    alert(typedChar); 
} 
</script> 

ライブの例は、Getting keyCode and charCode in JavaScriptです。

+0

最後に私は正しい説明を得ています – NaveenDA

0

私はこの文を書いていました。ユーザーが異なるブラウザでキーボードで入力したキーを検出したかったからです。

例えば、文字は> 0のcharCodeと0のkeyCodeを持ち、矢印のように矢印&のバックスペースは> 0のkeyCodeと0のcharCodeを持ちます。

ただし、このステートメントを使用すると、「衝突」が発生する可能性があるため問題になる可能性があります。 たとえば、DeleteキーとPeriodキーを区別したい場合は、Deleteキーコード= 46、PeriodにcharCode = 46があるため、これは機能しません。

関連する問題