Отмена ключа в HTML - PullRequest
       14

Отмена ключа в HTML

14 голосов
/ 14 июня 2010

Как отменить keydown определенной клавиши на клавиатуре, например (пробел, ввод и arrows) на странице HTML.

Ответы [ 6 ]

14 голосов
/ 14 июня 2010

Если вас интересуют только те примеры ключей, которые вы упомянули, то событие 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;
    }
};
5 голосов
/ 14 июня 2010

Поймать событие keydown и вернуть false. Должно быть в строках:

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

( здесь видно )

Ключевые коды определены здесь

edit: обновить мой ответ для работы в IE

1 голос
/ 13 июля 2014

Я разрабатываю только для 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()
        }
    });

});
0 голосов
/ 28 июня 2014

Это, безусловно, очень старая тема.Для того, чтобы творить чудеса с IE10 и FireFox 29.0.1, вы обязательно должны сделать это внутри keypress (не keydown) функции прослушивателя событий:

if (e.preventDefault) e.preventDefault();
0 голосов
/ 14 июня 2010

Просто верните false.Помните, что в Opera это не работает.Вы можете вместо этого использовать onkeyup, проверить последний введенный символ и разобраться с ним.Или лучше использовать JQuery KeyPress

0 голосов
/ 14 июня 2010

jQuery имеет замечательную функцию KeyPress , которая позволяет обнаруживать нажатие клавиши, тогда это просто случай определения значения клавиши и выполнения оператора if для тех, которые вы хотите игнорировать.

редактировать: например:

$('#target').keypress(function(event) {
  if (event.keyCode == '13') {
     return false; // or event.preventDefault();
  }
});
...