Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 取消HTML中的键控_Javascript_Html_Keydown - Fatal编程技术网

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,这不是数字字段博客,抱歉