なぜ人々は、一部の人々はまた、e.which
キーコードとCHARCODE
を使用
e.keyCode ? e.keyCode : e.charCode
のような文を書くのですが、誰かが説明していただけますか?
なぜ人々は、一部の人々はまた、e.which
キーコードとCHARCODE
を使用
e.keyCode ? e.keyCode : e.charCode
のような文を書くのですが、誰かが説明していただけますか?
条件文です。
ブラウザがe.keyCodeをサポートしている場合は、e.keyCodeとe.charCodeの両方を使用します。
それは
var code = event.keyCode || event.charCode
event.keyCodeに似ています:KeyPressイベントでの非文字キーやキーボードイベントの他のタイプのいずれかのキーのUnicode値を返します。
event.charCode:キー押しイベント中に押された文字キーのUnicode値を返します。
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はの私の説明の訂正次のようなコードを書くいくつかのことを必要とします。
e.charCodeは*テキストではありません。文字の(数字の)ユニコード値を返します。それはkeyCodeと異なり、例えばAとaに対して異なる値を持つ(すなわち、シフトが押されているかどうか)。 –
@Tor:訂正していただきありがとうございます。私は答えを編集しました。 –
キーイベントを一貫して処理するのは簡単ではありません。
最初に、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");
}
}
ありがとう、素敵な情報:D –
サー...なぜ私たちは使用するか.... evt.which || evt.keyCode ...なぜかe.which ...本質的にe.が押されたキーのkeyCodeまたは英数字キーの文字コードが押されたとき。 –
@bhavya_w:文字コードを 'keyCode'に格納し、' which'プロパティをサポートしない古いバージョンのInternet Explorer(バージョン8以前)をサポートします。詳細については、http://unixpapa.com/js/key.htmlを参照してください。 –
ここで説明します。
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>
最後に私は正しい説明を得ています – NaveenDA
私はこの文を書いていました。ユーザーが異なるブラウザでキーボードで入力したキーを検出したかったからです。
例えば、文字は> 0のcharCodeと0のkeyCodeを持ち、矢印のように矢印&のバックスペースは> 0のkeyCodeと0のcharCodeを持ちます。
ただし、このステートメントを使用すると、「衝突」が発生する可能性があるため問題になる可能性があります。 たとえば、DeleteキーとPeriodキーを区別したい場合は、Deleteキーコード= 46、PeriodにcharCode = 46があるため、これは機能しません。
これは1ライナーとして記述できます: 'var keyCode = event.keyCode || event.charCode'である。 – davidchambers