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

Как отключить клавишу 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;
            }
        }
    });

Какие-нибудь советы о том, что я здесь делаю неправильно?

Спасибо!

4b9b3361

Ответ 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();
  }
}