Отключить возврат с помощью прослушивателей DOM Level 3
Я делаю страницу, на которой пользователь должен иметь возможность печатать. Функция возврата по умолчанию - вернуться на страницу назад, однако мне нужно предотвратить это и назначить ей свою собственную функцию.
Проблема на самом деле в предотвращении возврата. Я могу захватить это, однако я не могу предотвратить это. Я использую прослушиватели 3-го уровня. Функция event.preventDefault() не работает для меня и не возвращает false.
Я пробовал это также:
function onunload(e) {
if (e.keyCode == 37) return false;
return true;
}
а также
<body onunload="return false;">
Однако первый в основном делает
return confirm("false");
а второй ничего не делает?
3 ответа
Полное предотвращение нажатия клавиши Backspace может быть плохой идеей, предположим, что вы сделали опечатку и хотите исправить ее в текстовом поле! Так что вам нужно отключить клавишу Backspace, только если кто-то не вводит текстовый ввод!
Это может работать во всех основных браузерах:
document.onkeydown = function (e) {
e = e || window.event;
if (e.keyCode == 8) { // Disable Backspace
var el = document.activeElement;
if (!((el.nodeName == "INPUT" && (el.type == "text" || el.type == "password")) || el.nodeName == "TEXTAREA")) {
e.preventDefault();
e.stopPropagation();
return false;
}
}
};
Спецификация модели событий DOM3 имеет обратную совместимость, поэтому я не думаю, что это может быть проблемой, однако это модифицированная версия DOM3 приведенного выше кода:
function KeyDownHandler(e) {
if (e.keyCode == 8) { // Disable Backspace
var el = document.activeElement;
if (!((el.nodeName == "INPUT" && (el.type == "text" || el.type == "password")) || el.nodeName == "TEXTAREA")) {
e.preventDefault();
e.stopPropagation();
}
}
};
if (document.attachEvent) document.attachEvent("onkeydown", KeyDownHandler);
else document.addEventListener("keydown", KeyDownHandler);
Регистрация событий DOM3, подобная описанной выше, может быть очень сложной, у Джона Ресига есть хорошая реализация, однако вы можете использовать стандартную кросс-браузерную библиотеку, такую как JQuery, которая прекрасно работает во всех основных браузерах!
Использовать keydown
обработчик на document
уровень:
document.onkeydown = function(e){
if (e.keyCode===8) {
return false;
}
};
AFAIR, можно запретить действия ярлыков браузера по умолчанию, вернув false в keypress
только в Firefox (и последняя версия, которую я тестировал, была 3.x).
beforeunload
а также unload
являются конкретными событиями, и строка должна быть возвращена в их обработчиках. Из соображений безопасности браузер может отображать только диалоговое окно подтверждения с предоставленным сообщением (эта строка). Более того, Firefox начиная с версии 4 даже игнорирует эту строку и всегда отображает стандартное сообщение.
Там нет никакого способа, чтобы молча запретить пользователю покинуть страницу.
Кстати, backspace не работает как history.back() в Ubuntu.