キーボードの特定のキーのkeydown
をキャンセルするにはどうすればよいですか(たとえば、HTMLページの(スペース、入力、およびarrows
))。
あなたが言及したサンプルキーのみに興味がある場合は、keydown
イベントが機能します。ただし、古いバージョンのOpera(バージョン12まで) 、少なくとも)keypress
イベントをキャンセルする必要がある場合。keydown
イベントよりもkeypress
イベントで印刷できないキーを確実に識別する方がはるかに簡単なので、以下では、変数を使用してkeydown
ハンドラーに設定し、デフォルトの動作を抑制するかどうかをkeypress
ハンドラーに指示します。
var cancelKeypress = false;
document.onkeydown = function(evt) {
evt = evt || window.event;
cancelKeypress = /^(13|32|37|38|39|40)$/.test("" + evt.keyCode);
if (cancelKeypress) {
return false;
}
};
/* For Opera */
document.onkeypress = function(evt) {
if (cancelKeypress) {
return false;
}
};
私はIEのために開発するだけです。私の作品にはそれが必要なので、数値フィールドのコードがあります。美しさではありませんが、問題なく動作します。
$(document).ready(function () {
$("input[class='numeric-field']").keydown(function (e) {
if (e.shiftKey == 1) {
return false
}
var code = e.which;
var key;
key = String.fromCharCode(code);
//Keyboard numbers
if (code >= 48 && code <= 57) {
return key;
} //Keypad numbers
else if (code >= 96 && code <= 105) {
return key
} //Negative sign
else if (code == 189 || code == 109) {
var inputID = this.id;
var position = document.getElementById(inputID).selectionStart
if (position == 0) {
return key
}
else {
e.preventDefault()
}
}// Decimal point
else if (code == 110 || code == 190) {
var inputID = this.id;
var position = document.getElementById(inputID).selectionStart
if (position == 0) {
e.preventDefault()
}
else {
return key;
}
}// 37 (Left Arrow), 39 (Right Arrow), 8 (Backspace) , 46 (Delete), 36 (Home), 35 (End)
else if (code == 37 || code == 39 || code == 8 || code == 46 || code == 35 || code == 36) {
return key
}
else {
e.preventDefault()
}
});
});
これは確かに非常に古いスレッドです。 IE10とFireFox29.0.1で魔法を実行するには、keypress
(keydown
ではなく)イベントリスナー関数内でこれを実行する必要があります。
if (e.preventDefault) e.preventDefault();
jQueryにはNice KeyPress関数 があり、キーの押下を検出できます。これは、キー値を検出し、無視したいものに対してifを実行する場合にすぎません。
編集:例:
$('#target').keypress(function(event) {
if (event.keyCode == '13') {
return false; // or event.preventDefault();
}
});
Falseを返すだけです。 on Operaこれは機能しないことに注意してください。代わりにonkeyupを使用して、最後に入力した文字を確認して処理することをお勧めします。または、JQueryKeyPressを使用することをお勧めします。