Подтвердить что ты не робот

Отмена нажатия клавиш в HTML

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

(см. здесь)

Коды клавиш определены здесь

изменить: обновить мой ответ на работу в IE

Ответ 3

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

});

Ответ 4

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

изменить: например:

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

Ответ 5

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

Ответ 6

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

if (e.preventDefault) e.preventDefault();