Как я могу отменить keydown
конкретного ключа на клавиатуре, например (пробел, ввод и arrows
) на странице HTML.
Отмена нажатия клавиш в HTML
Ответ 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();