[英]Disable backspace with DOM Level 3 Listeners
我正在制作一个用户必须能够输入的页面。 退格键的默认 function 是 go 返回一个页面,但是我需要防止这种情况并将我自己的 function 分配给它。
问题实际上是防止退格。 我可以捕获它,但我无法阻止它。 我正在使用 3 级事件侦听器。 event.preventDefault()
对我不起作用,也没有返回 false。
我也试过这个:
function onunload(e) {
if (e.keyCode == 37) return false;
return true;
}
和
<body onunload="return false;">
但是第一个基本上是
return confirm("false");
第二个什么都不做?
AFAIR,可以通过仅在 Firefox 的keypress
中返回 false 来阻止默认的浏览器快捷方式操作(我测试的最后一个版本是 3.x)。
beforeunload
和unload
是特定事件,应在其处理程序中返回字符串。 出于安全原因,浏览器可能只显示带有提供消息(该字符串)的确认对话框。 此外,Firefox 自版本 4 以来甚至忽略该字符串并始终显示标准消息。
没有办法默默地阻止用户离开页面。
顺便说一句,退格键在 Ubuntu 中不能用作 history.back()。
在document
级别使用keydown
处理程序:
document.onkeydown = function(e){
if (e.keyCode===8) {
return false;
}
};
完全阻止退格键可能不是一个好主意,假设您打错了字并想在文本框中修复它! 因此,只有当有人没有输入文本时,您才需要禁用退格键!
这可能适用于所有主流浏览器:
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 事件 model 规范具有向后兼容性,所以我认为这可能不是问题,但这是上述代码的 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 事件注册可能会很痛苦, John Resig对此有很好的实现,但是您可以使用标准的跨浏览器库,如 JQuery,它在所有主流浏览器中都可以正常工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.