JavaScript 阻止浏览器后退键防止表单误清空

作者:流萤

时间:2026-10-27

浏览:533

本文介绍如何使用 JavaScript 和 jQuery 阻止浏览器 Backspace 键触发的后退事件,防止用户误操作导致已填写的表单数据丢失。代码通过判断事件源类型(如 text、password、textarea)及其 readonly 或 enabled 状态,仅在非编辑状态下禁用后退键,确保文本框内正常退格功能不受影响。

文章目录

JavaScript 阻止浏览器后退键防止表单误清空

由于许多用户缺乏电脑操作经验,容易因误触按键导致页面后退,从而清空辛苦填写的表单内容。针对这一常见问题,网上搜集了多种解决方案并整合如下,供读者参考。


核心实现代码

具体实现代码如下:

 
$(function(){
// 处理键盘事件,禁止 Backspace 键(Backspace)导致页面后退,但密码框或单行、多行文本框除外
function banBackSpace(e){
var ev = e || window.event; // 获取 event 对象
var obj = ev.target || ev.srcElement; // 获取事件源元素
var t = obj.type || obj.getAttribute('type'); // 获取事件源类型
// 获取作为判断条件的事件类型
var vReadOnly = obj.getAttribute('readonly');
var vEnabled = obj.getAttribute('enabled');
// 处理 null 值情况
vReadOnly = (vReadOnly == null) ? false : true;
vEnabled = (vEnabled == null) ? true : vEnabled;
// 当按下 Backspace 键时,若事件源类型为密码或单行、多行文本框,
// 且 readonly 属性为 true 或 enabled 属性为 false,则退格键失效(即禁止后退)
var flag1=(ev.keyCode == 8 && (t=="password" || t=="text" || t=="textarea")
&& (vReadOnly || vEnabled!=true))?true:false;
// 当按下 Backspace 键时,若事件源类型非密码或单行、多行文本框,则退格键失效(即禁止后退)
var flag2=(ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea")
?true:false;
// 判断逻辑
if(flag2){
return false;
} 
if(flag1){
return false;
} 
} 
// 禁止后退键 作用于 Firefox、Opera
document.onkeypress=banBackSpace;
// 禁止后退键 作用于 IE、Chrome
document.onkeydown=banBackSpace;
window.history.forward(1); // 屏蔽浏览器自带的后退键
}) 

需要注意的地方是:

代码注意事项与修正

这段代码必须放置在初始化方法中执行。通过 document.onkeypress=banBackSpace 调用自定义方法。


具体代码片段如下:

 
vReadOnly = (vReadOnly == null) ? false : true; 对于这段代码,原逻辑中冒号后返回 vReadOnly 的值,但在实际项目中该值可能返回空字符串而非 null,因此将其修改为 true。

按照上述方法,即可实现在非 text、password、textarea 元素上按下 Backspace 键时阻止浏览器后退,同时不会阻止在文本框内有值时的正常退格编辑事件。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章