Как предотвратить действие браузера по умолчанию для кнопки возврата на кнопку возврата с помощью JavaScript? - PullRequest
6 голосов
/ 03 октября 2010

Есть ли способ предотвратить действие по умолчанию, когда пользователь нажимает клавишу Backspace в браузере? Мне не нужно препятствовать уходу пользователя, просто есть действие возврата по умолчанию. Мне нужно backspace, чтобы сделать что-то другое (это игра).

Я безуспешно пытался:

window.addEventListener('keydown', function(e) {
    if (e.keyCode === Game.Key.BACK_SPACE)
    {
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
}, false);

Если я помещу предупреждение в if, оно будет отображаться для нажатия клавиши возврата. Итак, код ключа правильный.

Редактировать: это должно работать в Opera 10.6, Firefox 4, Chrome 6, IE 9 и Safari 5.

Ответы [ 3 ]

12 голосов
/ 03 октября 2010

Вам не нужно return false или e.stopPropagation();ни один не будет иметь никакого значения в слушателе, прикрепленном с addEventListener.Ваш код не будет работать в Opera, которая позволяет вам подавлять поведение браузера по умолчанию в событии keypress или IE <= 8, который не поддерживает <code>addEventListener.Следующее должно работать во всех браузерах, если у вас нет keydown и keypress обработчиков событий на document.

EDIT : теперь также отфильтровываются события, которые произошли от элемента <input> или <textarea>:

function suppressBackspace(evt) {
    evt = evt || window.event;
    var target = evt.target || evt.srcElement;

    if (evt.keyCode == 8 && !/input|textarea/i.test(target.nodeName)) {
        return false;
    }
}

document.onkeydown = suppressBackspace;
document.onkeypress = suppressBackspace;
0 голосов
/ 20 мая 2016

Если вы предпочитаете просто иметь исправление для себя, не влияя на других пользователей при написании сценариев на веб-странице, читайте ниже.

Вот некоторые решения, которые меняют только используемый вами браузер:
- Firefox в Linux «отключил» поведение backspace с 2006 года, поэтому оно не затронуто;(во всяком случае, до этого он был просто настроен на прокрутку вверх)
- Chrome только что объявил, что теперь будет делать то же самое;(http://forums.theregister.co.uk/forum/1/2016/05/20/chrome_deletes_backspace/)
- Firefox в Windows можно настроить на игнорирование возврата, перейдя в about: config и изменив настройку backspace_action на 2; (* http://kb.mozillazine.org/Browser.backspace_action)
- Safari?!

0 голосов
/ 01 августа 2013

Я нашел на странице Telerik скрипт, готовый к использованию. Скрипт блокирует действие кнопки «Назад»: нажав в браузере кнопку «Назад» и «Backspace» на странице. Этот скрипт работает. Я использую это в своем проекте. http://www.telerik.com/community/code-library/aspnet-ajax/general/disable-backspace-from-master-page.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...