如何取消keydown
键盘上的特定键,例如arrows
HTML 页面中的(空格、回车和)。
问问题
45287 次
6 回答
20
如果您只对您提到的示例键感兴趣,则该keydown
事件将执行,除了旧的、预 Blink 版本的 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;
}
};
于 2010-06-14T10:13:14.503 回答
0
jQuery 有一个很好的KeyPress 函数,它允许您检测按键,那么它应该只是检测键值并对您想要忽略的键值执行 if 的情况。
编辑:例如:
$('#target').keypress(function(event) {
if (event.keyCode == '13') {
return false; // or event.preventDefault();
}
});
于 2010-06-14T09:48:44.990 回答
0
只返回假。请注意,在 Opera 上这不起作用。您可能想改用 onkeyup 并检查最后输入的字符并处理它。或者更好的使用 JQuery KeyPress
于 2010-06-14T09:52:08.450 回答
0
这当然是非常古老的线程。为了在 IE10 和 FireFox 29.0.1 中发挥魔力,您必须在keypress
(not keydown
) 事件侦听器函数中执行此操作:
if (e.preventDefault) e.preventDefault();
于 2014-06-27T21:55:03.933 回答
0
我只为 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()
}
});
});
于 2014-07-12T20:22:55.433 回答