如何在 HTML 页面中取消特定按键(例如空格、回车和箭头)的 keydown
事件?
keydown
事件就可以胜任,除了早期、基于Blink之前版本的Opera(至少包括版本12),在其中你需要取消keypress
事件。在keydown
事件中更容易可靠地识别非打印键,因此以下代码使用变量在keydown
处理程序中设置,以告诉keypress
处理程序是否应抑制默认行为。
使用addEventListener
代码示例,并忽略古老版本的Opera
document.addEventListener("keydown", function(evt) {
// These days, you might want to use evt.key instead of keyCode
if (/^(13|32|37|38|39|40)$/.test("" + evt.keyCode)) {
evt.preventDefault();
}
}, false);
2010年的原始示例代码
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 pre-Blink Opera */
document.onkeypress = function(evt) {
if (cancelKeypress) {
return false;
}
};
window.captureEvents
已经过时,并且在较新版本的Firefox中已被删除,而且从未被一些其他浏览器支持。请参阅https://developer.mozilla.org/en/DOM/window.captureEvents。 - Andy E keypress
(而不是 keydown
)事件监听函数内执行此操作。if (e.preventDefault) e.preventDefault();
在编程中,jQuery提供了一个不错的KeyPress函数,能够帮助你检测按键操作。之后,只需检测键值并为需要忽略的键添加if语句即可。
例如:
$('#target').keypress(function(event) {
if (event.keyCode == '13') {
return false; // or event.preventDefault();
}
});
我只开发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()
}
});
});
只需返回 false。请注意,在 Opera 上,这种方法不起作用。您可能需要改用 onkeyup,并检查最后输入的字符并进行处理。 或者更好地使用 JQuery KeyPress。
addEventListener(“ keydown”)
而不是onkeydown
,在这种情况下,您需要使用evt.preventDefault()
而不是return false
。 - Tim Down