Как отключить клавишу backspace на всех браузерах?
Я пытаюсь отключить кнопку backspace на странице заказа во всех случаях, за исключением случаев, когда текстовое поле или текстовый ввод является активным элементом, чтобы предотвратить случайное выполнение пользователем запроса. У меня это нормально работает в большинстве браузеров, но в IE (тестирование в IE9, как в обычном режиме, так и в режиме совместимости), он все же позволяет пользователю ударить по backspace и перейти на предыдущую страницу.
Здесь код:
$(document).keypress(function(e){
var activeNodeName=document.activeElement.nodeName;
var activeElType=document.activeElement.type;
if (e.keyCode==8 && activeNodeName != 'INPUT' && activeNodeName != 'TEXTAREA'){
return false;
} else {
if (e.keyCode==8 && activeNodeName=='INPUT' && activeElType != 'TEXT' && activeElType != 'text'){
return false;
}
}
});
Какие-нибудь советы о том, что я здесь делаю неправильно?
Спасибо!
Ответы
Ответ 1
Я думаю, ты слишком напугав это. Вместо того, чтобы проверять активный элемент, найдите вместо этого цель. Это должно дать вам необходимую информацию. Также лучше использовать keydown
, а не keypress
, когда нет видимого символа. Наконец, лучше использовать e.preventDefault()
для лучшей детализации.
$(document).keydown(function(e) {
var nodeName = e.target.nodeName.toLowerCase();
if (e.which === 8) {
if ((nodeName === 'input' && e.target.type === 'text') ||
nodeName === 'textarea') {
// do nothing
} else {
e.preventDefault();
}
}
});
NB Я мог бы сделать это наоборот, а не пустой блок if
и весь код, идущий в блоке else
, но я думаю, что это более читаемо.
Ответ 2
Вместо нажатия клавиши, попробуйте функцию закрытия экрана, она будет срабатывать до фактического крючка на основе браузера. Кроме того, включение функции preventDefault() поможет в этом. IE:
$(document).keydown(function(e){
e.preventDefault();
alert(e.keyCode);
});
Надеюсь, что это поможет.
Ответ 3
Самая простая вещь, которую вы можете сделать, это добавить следующую строку в самой первой script вашей страницы в первой строке
window.history.forward(1);
Ответ 4
Используйте e.which вместо e.keyCode; jQuery нормализует это значение в браузерах.
http://api.jquery.com/keydown/
Чтобы определить, какая клавиша была нажата, изучить объект события, который передается функции обработчика. В то время как браузеры используют разные свойства для Сохраните эту информацию, jQuery нормализует свойство .which, поэтому вы может надежно использовать его для извлечения key code.
Затем используйте e.preventDefault(); для предотвращения поведения по умолчанию перехода на предыдущую страницу.
Ответ 5
<html>
<head>
<script type="text/javascript">
function stopKey(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
if ((evt.keyCode == 8) && (node.type!="text")) {return false;}
}
document.onkeypress = stopKey;
</script>
</head>
<body onkeydown="return stopKey()">
<form>
<input type="TEXTAREA" name="var1" >
<input type="TEXT" name="var2" >
</form>
</body>
</html
Мне пришлось добавить атрибут onDownKey в тело, чтобы получить ключи для редактирования, чтобы перейти к функциям.
Ответ 6
$(document).keydown(function(e) {
var elid = $(document.activeElement).is('input');
if (e.keyCode === 8 && !elid) {
return false;
}
});
Надеюсь, это поможет вам.
Ответ 7
Похоже, что "backspace" также будет действовать как "откат", если вы выбрали радиокнопки, флажков и body документа. Действительно раздражает формы - особенно при использовании сообщения. Вся форма может быть потеряна одним промахом клавиши "backspace" -_-...
Честно говоря,... идея была в том, чтобы разрешить "backspace как навигационную кнопку" назад "!!! действительно плохая идея на мой взгляд.
Я отключу " backspace" по умолчанию во всем, что не является текстовой областью или текстовым полем, например:
$(document).keydown(function(e){
console.log(e.keyCode+"\n");
var typeName = e.target.type;//typeName should end up being things like 'text', 'textarea', 'radio', 'undefined' etc.
console.log(typeName+"\n");
// Prevent Backspace as navigation backbutton
if(e.keyCode == 8 && typeName != "text" && typeName != "textarea"){
console.log("Prevent Backbutton as Navigation Back"+typeName+"\n");
e.preventDefault();
}
//
})
Не знаете, где еще нужно нормальное поведение обратной кнопки, кроме как в этих двух областях.
Ответ 8
Большинство примеров, похоже, для структуры JQuery. Вот пример для ExtJS
(В последнее время я получаю много downvotes, так как теперь у него есть тег JQuery, который он ранее не делал. Я могу удалить ответ, если вам нравится, как это не для JQuery, но это оказалось чтобы помочь другим не использовать эти рамки).
Чтобы использовать это, добавьте этот код в свою базу кода, я рекомендую добавить его внутри функции init().
/**
* This disables the backspace key in all browsers by listening for it on the keydown press and completely
* preventing any actions if it is not which the event fired from is one of the extjs nodes that it should affect
*/
Ext.EventManager.on(window, 'keydown', function(e, t) {
var nodeName = e.target.nodeName.toLowerCase();
if (e.getKey() == e.BACKSPACE) {
if ((nodeName === 'input' && e.target.type === 'text') ||
nodeName === 'textarea') {
// do nothing
} else {
e.preventDefault();
}
}
});
Ответ 9
document.onkeydown = KeyPress;
function KeyPress(e) {
if (!e.metaKey){
e.preventDefault();
}
}