19

如何取消keydown键盘上的特定键,例如arrowsHTML 页面中的(空格、回车和)。

4

6 回答 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 回答
5

捕获 keydown 事件并返回 false。它应该在以下行中:

<script>
document.onkeydown = function(e){
  var n = (window.Event) ? e.which : e.keyCode;
  if(n==38 || n==40) return false;
}
</script>

在这里看到

键码在这里定义

编辑:更新我在 IE 中工作的答案

于 2010-06-14T09:47:46.473 回答
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 回答