Не отображается, что при нажатии клавиши backspace запускаются функции jQuery keyup, keydown или keypress. Как мне уловить нажатие клавиши backspace?
Как заблокировать ключ backspace с помощью jQuery?
Ответ 1
попробуйте следующее:
$('html').keyup(function(e){if(e.keyCode == 8)alert('backspace trapped')})
Ответ 2
Регулярный javascript может использоваться для захвата ключа backspace. Вы можете использовать метод event.keyCode. Код ключа равен 8, поэтому код будет выглядеть примерно так:
if (event.keyCode == 8) {
// Do stuff...
}
Если вы хотите проверить как клавиши [delete] (46), так и клавиши [backspace] (8), используйте следующее:
if (event.keyCode == 8 || event.keyCode == 46) {
// Do stuff...
}
Ответ 3
Работа над той же идеей, что и выше, но немного обобщающая. Поскольку обратное пространство должно работать нормально на входных элементах, но не должно работать, если фокус является абзацем или чем-то еще, поскольку он находится там, где страница имеет тенденцию возвращаться к предыдущей странице в истории.
$('html').on('keydown' , function(event) {
if(! $(event.target).is('input')) {
console.log(event.which);
//event.preventDefault();
if(event.which == 8) {
// alert('backspace pressed');
return false;
}
}
});
return false = > действуют как event.preventDefault, так и event.stopPropagation.
Ответ 4
Поведение по умолчанию для backspace в большинстве браузеров - это возврат к предыдущей странице. Если вы выполняете не, вам нужно выполнить вызов preventDefault()
. Однако, поскольку OP ссылается на, если вы всегда называете это preventDefault()
, вы также не сможете удалить вещи в текстовых полях. В приведенном ниже коде есть решение, адаптированное из этого ответа.
Кроме того, вместо использования жестко закодированных значений KeyCode (некоторые значения изменяются в зависимости от вашего браузера, хотя я не нашел, что это верно для Backspace или Delete), jQuery имеет уже определенные константы KeyCode. Это делает ваш код более читабельным и заботится о любых несогласованностях keyCode для вас.
// Bind keydown event to this function. Replace document with jQuery selector
// to only bind to that element.
$(document).keydown(function(e){
// Use jquery constants rather than an unintuitive magic number.
// $.ui.keyCode.DELETE is also available. <- See how constants are better than '46'?
if (e.keyCode == $.ui.keyCode.BACKSPACE) {
// Filters out events coming from any of the following tags so Backspace
// will work when typing text, but not take the page back otherwise.
var rx = /INPUT|SELECT|TEXTAREA/i;
if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){
e.preventDefault();
}
// Add your code here.
}
});