回答:
KeyPressイベントは、文字のみのために呼び出された(印刷可能)キーは、KeyDownイベントのイベントがすべてのような印刷不可能を含むために発生しControl、Shift、Alt、BackSpace、など
更新:
keypressイベントは、キーが押され、そのキーが通常は文字値を生成すると発生します
のkeydown代わりに試してくださいkeypress。
キーボードイベントがこの順序で発生します。keydown、keyup、keypress
バックスペースの問題はおそらくブラウザが戻ってナビゲートするkeyupため、ページにkeypressイベントが表示されないことです。
keyup場合、イベントが発生するまで、キャラクターはフィールドに表示されません。
keydownイベントを発生させるだけですが、その後しばらくの間、文字は入力から削除されません。
keypressイベントには、ブラウザ間で異なる場合があります。
Jsfiddleを作成して、ChromeとFirefoxでキーボードイベント(JQueryショートカットを使用)を比較しました。keypressイベントを使用しているブラウザーに応じて、トリガーkeydown/keypress/keyupされるかトリガーされません-バックスペースはFirefoxでトリガーされますがkeydown/keyup、Chromeでのみトリガーされます。
Chrome
keydown/keypress/keyupブラウザがキーボード入力を登録したとき(keypressが発生)
keydown/keyup キーボード入力がない場合(alt、shift、バックスペース、矢印キーでテスト)
keydown タブのみ?
Firefoxで
keydown/keypress/keyupブラウザがキーボード入力だけでなく、バックスペース、矢印キー、タブも登録するとき(入力がkeypressない場合でもここで起動されます)
keydown/keyup alt、shift
https://api.jquery.com/keypress/によると、これは驚くべきことではありません。
注:keypressイベントは公式の仕様ではカバーされていないため、使用時に実際に発生する動作は、ブラウザー、ブラウザーのバージョン、プラットフォームによって異なる場合があります。
keypressイベントタイプの使用はW3Cで非推奨になりました(http://www.w3.org/TR/DOM-Level-3-Events/#event-type-keypress)
keypressイベントタイプは、参照と完全性のためにこの仕様で定義されていますが、この仕様では、このイベントタイプの使用を廃止しています。コンテキストを編集する場合、作成者はbeforeinputイベントをサブスクライブできます。
最後に、質問に答えるには、keyupまたはkeydownを使用して、FirefoxとChromeのバックスペースを検出する必要があります。
ここで試してください:
$(".inputTxt").bind("keypress keyup keydown", function (event) {
var evtType = event.type;
var eWhich = event.which;
var echarCode = event.charCode;
var ekeyCode = event.keyCode;
switch (evtType) {
case 'keypress':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
case 'keyup':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<p>");
break;
case 'keydown':
$("#log").html($("#log").html() + "<b>" + evtType + "</b>" + " keycode: " + ekeyCode + " charcode: " + echarCode + " which: " + eWhich + "<br>");
break;
default:
break;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input class="inputTxt" type="text" />
<div id="log"></div>
私の数値制御:
function CheckNumeric(event) {
var _key = (window.Event) ? event.which : event.keyCode;
if (_key > 95 && _key < 106) {
return true;
}
else if (_key > 47 && _key < 58) {
return true;
}
else {
return false;
}
}
<input type="text" onkeydown="return CheckNumerick(event);" />
それを試してみてください
BackSpaceキーコードは8
より新しく、よりクリーン:を使用しますevent.key。これ以上の任意の番号コードはありません!
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
.key現在、ドキュメントで推奨されているオプションです。さらに、特定のキーに対して異なるマッピングを持つさまざまな国際キーボードをサポートします。それらは修正されているという意味では恣意的ではありませんが、コードを読むときのものです
代わりに、keyup / keydown / beforeinputイベントのいずれかを使用してください。
この参照に基づいて、keypressは非推奨になり、推奨されなくなりました。
keypressイベントは、文字値を生成するキーが押されたときに発生します。文字値を生成するキーの例には、アルファベット、数字、句読点などがあります。文字値を生成しないキーの例は、Alt、Shift、Ctrl、Metaなどの修飾キーです。
「beforeinput」を使用する場合は、ブラウザの互換性に注意してください。「beforeinput」と他の2つの違いは、「beforeinput」は入力値が変更されようとしているときに発生するため、入力値を変更できない文字では発生しません(たとえば、shift、ctr、alt)。
同じ問題があり、キーアップを使用することで解決しました。
keypressは、多くのブラウザでイベントを発生させます。unixpapa.com/js/key.htmlを