回答:
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を