今天有个新需求,要求在窗口中编辑的时候禁用掉退格键,因为退格键会发生页面后退的动作,编辑的时候非常不便.
在网上搜索了一下,有两种方法,最后决定采用这位仁兄的方法,见http://volunteer521.iteye.com/blog/830522,这是其根据第一种方法做的改良,但是发现还是存在bug,最后做解释!
这里容我多说几句,先说第一种方法: 原理是采用键盘监听,处理键盘事件,这里他的处理方法是将type="text" "password"及"textarea"的输入框以外的元素做了退格键的禁用.
javascript代码
//处理键盘事件
function doKey(e){
var ev = e || window.event;//获取event对象
var obj = ev.target || ev.srcElement;//获取事件源
var t = obj.type || obj.getAttribute('type');//获取事件源类型
if(ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea"){
return false;
}
}
//禁止后退键 作用于Firefox、Opera
document.onkeypress=doKey;
//禁止后退键 作用于IE、Chrome
document.onkeydown=doKey;
以上的bug在于,当编辑窗口中有一个不可编辑的输入框的时候,如果光标的位置在其上,敲退格键的时候依然会发生页面后退.所以,第二种方法做了改良:代码如下
//处理键盘事件 禁止后退键(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 : vReadOnly;
vEnabled = (vEnabled == null) ? true : vEnabled;
//当敲Backspace键时,事件源类型为密码或单行、多行文本的,
//并且readonly属性为true或enabled属性为false的,则退格键失效
var flag1=(ev.keyCode == 8 && (t=="password" || t=="text" || t=="textarea")
&& (vReadOnly==true || 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;
而以上的bug在于,在浏览器中,光标在一个不可编辑的输入框上的时候,退格键依然会产生页面后退效果!
原因: 在Firefox及Chrome中 obj.getAttribute('readonly') 返回的值是null,或"",而在IE中,该方法返回的是"readonly"或"",而且根据测试,
并没有"enable"的属性,而应该是"disabled",因此,上述方法固然会失效.而且获取DOM的对象属性及标准属性的时候,不应该采用getAttribute方法,这是不准确的,应采用obj.attribute标准方法,这样不会存在因浏览器对js的解释差异而导致的兼容性问题.因此修正以上bug后,产出的代码如下:
//处理键盘事件 禁止后退键(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.readOnly;
var vDisabled = obj.disabled;
//处理undefined值情况
vReadOnly = (vReadOnly == undefined) ? false : vReadOnly;
vDisabled = (vDisabled == undefined) ? true : vDisabled;
//当敲Backspace键时,事件源类型为密码或单行、多行文本的,
//并且readOnly属性为true或disabled属性为true的,则退格键失效
var flag1= ev.keyCode == 8 && (t=="password" || t=="text" || t=="textarea")&& (vReadOnly==true || vDisabled==true);
//当敲Backspace键时,事件源类型非密码或单行、多行文本的,则退格键失效
var flag2= ev.keyCode == 8 && t != "password" && t != "text" && t != "textarea" ;
//判断
if(flag2 || flag1)return false;
}
//禁止退格键 作用于Firefox、Opera
document.onkeypress=banBackSpace;
//禁止退格键 作用于IE、Chrome
document.onkeydown=banBackSpace;
分享到:
相关推荐
### 禁止使用退格键的JavaScript实现 在网页应用开发中,有时为了保护用户数据的安全性或防止误操作,我们需要对用户的某些输入行为进行限制。比如,在表单填写过程中,可能不希望用户能够通过退格键(Backspace)...
在网页应用中,有时我们需要禁用用户使用退格键(Backspace)进行页面回退,以防止意外的数据丢失或功能误触发。标题提到的“jquery+js两种方式实现的禁止退格键回退”主要涉及JavaScript和jQuery这两种方法来阻止...
首先,实现禁用退格键的基本思路是通过JavaScript监听键盘事件,并在用户尝试通过退格键删除信息时进行拦截。具体实现可以分为两个主要的思路: 1. 禁止退格键导致浏览器后退到前一页面或表单状态。通常情况下,按...
### JavaScript禁用键盘功能键及鼠标操作 在Web开发中,有时为了保护网站内容或提供特定的用户体验,开发者可能会选择禁用浏览器的一些默认行为,比如禁用键盘上的某些功能键、鼠标右键点击等。下面将详细介绍如何...
在Web开发中,通常会遇到需要屏蔽浏览器默认行为的场景,比如在编辑文章的页面中屏蔽用户按退格键(Backspace)或F5刷新页面,以免造成正在编辑的内容丢失。尤其是退格键,它不仅会删除文本框中的字符,还会导致...
为了解决这个问题,我们可以编写一段JavaScript代码来禁用只读文本框在获得焦点时的退格键功能。以下是一个简单的实现方案: ```javascript document.documentElement.onkeydown = function(evt) { var b = !!evt,...
### JavaScript禁用后退键(Backspace)实例详解 #### 一、背景介绍 在Web开发过程中,有时候我们需要对用户的操作进行一定的限制,比如在某些特定的表单或输入框中,不允许用户通过按后退键(Backspace)来撤销之前...
例如,你可以监听`keydown`事件,并检查是否是退格键(键码127或`event.key`为"Backspace"),然后阻止其默认动作。 ```javascript document.addEventListener('keydown', function(event) { if (event.keyCode ==...
在网页开发中,有时我们需要禁用用户使用浏览器的退格键(Backspace)来防止其触发页面后退的行为,特别是在用户进行数据输入或者操作时,误按退格键导致页面跳转可能会造成不便或数据丢失。这篇内容主要讨论的是...
在描述中提到的"启用"和"禁用"实际上是指允许或阻止特定行为,比如在这里是阻止用户按下退格键(Backspace)。 在HTML5中,我们可以创建一个只读文本框通过设置`readonly`属性为`true`。例如: ```html 这是只读...
例如,以下代码会屏蔽F1键、F5键(刷新)、退格键(Backspace)以及Ctrl+R(重新加载): ```javascript document.onkeydown = function(event) { if (event.keyCode == 8 || // Backspace event.keyCode == ...
为了防止退格键(Backspace)导致浏览器返回上一页的行为,我们需要绑定键盘按下(keydown)事件,并在事件处理函数中判断按键的代码(keyCode)。退格键的keyCode值为8。通过判断当前事件的目标元素(target),...
针对这个问题,我们可以编写JavaScript代码来屏蔽退格键(Backspace)的功能。以下是一个具体的实例代码: ```javascript // 处理键盘事件,禁止后退键(Backspace)密码或单行、多行文本框除外 function ...
在JavaScript编程中,有时我们可能需要禁用浏览器的默认行为,比如禁制用户按下后退键(Backspace)的功能。这通常在特定场景下进行,比如防止用户在输入表单时误触后退键导致数据丢失。下面我们将详细讨论如何通过...
在网页开发中,有时我们需要对用户的键盘操作进行特殊处理,特别是在一些特定的场景下,比如在SPA(单页面应用)中,我们可能希望阻止用户在非输入区域按下退格键(Backspace)时触发浏览器的后退功能。这是因为,...
如果希望禁用退格键(Backspace)使得用户无法通过按退格键返回上一页,可以使用以下代码: ```javascript $(document).keydown(function (e) { var doPrevent; if (e.keyCode == 8) { var d = e.srcElement |...
- **BackSpace (8)**:退格键,用于删除光标前的一个字符。 - **Tab (9)**:制表符键,用于跳转到下一个可编辑字段。 - **Clear (12)**:清除键,在某些键盘上可用,用于清除当前输入。 - **Enter (13)**:回车键,...