keypress
リスナーを使用しています。
addEventListener("keypress", function(event){
}
ただし、これはテキストを消去するバックスペースを検出しないようです...
これを検出するために使用できる別のリスナーはありますか?
KeyPressイベントは文字(印刷可能)キーに対してのみ呼び出され、KeyDownイベントは次のような印刷不可を含むすべてに対して発生します。 Control、 Shift、 Alt、 BackSpaceなど.
更新:
Keypressイベントは、キーが押されたときに発生し、そのキーは通常文字値を生成します
参照 。
keydown
の代わりにkeypress
を試してください。
キーボードイベントは、keydown
、keyup
、keypress
の順に発生します。
バックスペースの問題は、おそらくブラウザーがkeyup
に戻ってナビゲートするため、ページにkeypress
イベントが表示されないことです。
keypress
イベントは、ブラウザーによって異なる場合があります。
ChromeとFirefoxで(JQueryショートカットを使用して)キーボードイベントを比較するために Jsfiddle を作成しました。使用しているブラウザに応じて、keypress
イベントがトリガーされるかどうかが決まります。Firefoxではkeydown/keypress/keyup
がトリガーされますが、Chromeではkeydown/keyup
のみがトリガーされます。
Chromeで
keydown/keypress/keyup
ブラウザーがキーボード入力を登録するとき(keypress
が起動されます)
keydown/keyup
キーボード入力がない場合(Alt、Shift、Backspace、矢印キーでテスト)
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>
誰かがフォームフィールドにいると思っているときにバックスペースを押す問題に遭遇した場合に私が書いたもの
window.addEventListener("keydown", function(e){
/*
* keyCode: 8
* keyIdentifier: "U+0008"
*/
if(e.keyCode === 8 && document.activeElement !== 'text') {
e.preventDefault();
alert('Prevent page from going back');
}
});
私の数値制御:
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
}
});