Javascript 取消HTML中的键控
如何取消键盘上特定键的Javascript 取消HTML中的键控,javascript,html,keydown,Javascript,Html,Keydown,如何取消键盘上特定键的keydown,例如HTML页面中的空格、回车键和箭头。捕获keydown事件并返回false。它应符合以下要求: <script> document.onkeydown = function(e){ var n = (window.Event) ? e.which : e.keyCode; if(n==38 || n==40) return false; } </script> document.onkeydown=函数(e){ var
keydown
,例如HTML页面中的空格、回车键和箭头。捕获keydown事件并返回false。它应符合以下要求:
<script>
document.onkeydown = function(e){
var n = (window.Event) ? e.which : e.keyCode;
if(n==38 || n==40) return false;
}
</script>
document.onkeydown=函数(e){
var n=(window.Event)?e.which:e.keyCode;
如果(n==38 | | n==40)返回false;
}
()
键代码已定义
编辑:更新我的答案以在IE中工作jQuery有一个nice,允许您检测按键,那么它应该只是检测keyvalue并对您想要忽略的按键执行if的情况
编辑:
例如:
$('#target').keypress(function(event) {
if (event.keyCode == '13') {
return false; // or event.preventDefault();
}
});
只要返回false。当心,在歌剧中这是行不通的。您可能希望改用onkeyup,检查最后输入的字符并处理它。
或者更好地使用JQuery按键如果您只对您提到的示例键感兴趣,则可以使用keydown
事件,但较旧的、闪烁前版本的Opera(至少包括版本12)除外,您需要取消按键
事件。与keypress
事件相比,在keypdown
事件中更容易可靠地识别不可打印的键,因此下面使用变量在keypdown
处理程序中进行设置,以告知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;
}
};
这当然是非常古老的线索。
为了实现IE10和FireFox 29.0.1的神奇功能,您必须在keypress
(而不是keydown
)事件监听器功能中实现这一点:
if (e.preventDefault) e.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()
}
});
});
$(文档).ready(函数(){
$(“输入[class='numeric-field'])。向下键(函数(e){
如果(e.shiftKey==1){
返回错误
}
var代码=e.which;
var键;
key=String.fromCharCode(代码);
//键盘号码
如果(code>=48&&code=96&&code根据他设置的标记,他完全没有使用jquery。除了使用ASP之外,我使用jquery没有问题。NET@Luke:jQuery是否规范化了keypress
事件?它在不同浏览器中的行为不同,因此我想知道jQuery是否解决了这些差异。@Andy E的头:I我非常相信jQuery的一切,但我不是专家。从我所读到的内容来看,我非常确定jQuery是跨浏览器的,并且根据他们的网站支持IE6+FF2+Chrome和Safari。如果按键事件有不同的行为,我肯定他们已经涵盖了它。window.captureEvents
已经过时并被删除来自较新版本的Firefox,其他浏览器不支持。请看。@andy,@tim:true,我盲目复制和粘贴。我更正了我的答案。当然现在@tim的答案是最快和更准确的+1,我删除了我的答案而支持这一个,我不知道Opera的问题:-)Opera怪癖现在还存在吗?你仍然需要用按键取消吗?@RobertKoritnik:我刚刚试过,但它不适用于最新版本的Opera。我猜它不适用于任何基于眨眼的Opera版本。谢谢。我只是想确定一下,我正在编写的come代码涉及按键取消,而我不需要安装Opera只是为了检查这一点。请注意,如果在按下向上箭头时更改keydown事件中文本框的值,则必须使用e.preventDefault()防止光标出现在文本的开头,而不是文本的结尾。这是一个非常罕见的警告,但当用户使用向上和向下箭头键浏览命令历史记录时,用于基于web的终端。Upps,这不是数字字段博客,抱歉