如何禁用backspace。考虑在ie及firefox两种情况。

抽风的凹凸曼 2010-01-19 10:22:59
有如下代码:

if(document.addEventListener){
document.addEventListener("keydown",maskBackspace, true); //firefox
}else{
document.attachEvent("onkeydown",maskBackspace); //ie
}

function maskBackspace(event){
var event = event || window.event; //标准化事件对象
var obj = event.target || event.srcElement;

if(event.keyCode == 8){
//如果是input跟textarea,回退键正常使用,否则回退键失效。
if(obj!=null && obj.tagName!=null && (obj.tagName.toLowerCase() == "input"
|| obj.tagName.toLowerCase() == "textarea")){
event.keyCode = 8 ;
event.returnValue = true ;
if(Ext.getCmp(obj.id)){
if(Ext.getCmp(obj.id).readOnly) {
event.keyCode = 0;
event.returnValue = false ;
}
}
}else{
event.keyCode = 0;
event.returnValue = false ;
}
}
}

在ie下测试成功,但是在ff下,keyCode是只读属性,测试失败。

请问下各位高手,如何才能在ff下实现屏蔽backspace的功能呢?
...全文
410 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
云中雁荡山 2010-01-19
  • 打赏
  • 举报
回复
响应事件,指的是不是
document.addEventListener("keydown",maskBackspace, true); //firefox
中的这个keydown?

是的

event.keyCode=0 应该是不做任何事情吧。
抽风的凹凸曼 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lltse85 的回复:]
顺便问一下,
            event.returnValue = false ;


就是让响应的事件不执行。
默认是 event.returnValue = true ;执行
[/Quote]
响应事件,指的是不是
document.addEventListener("keydown",maskBackspace, true); //firefox
中的这个keydown?
那event.keyCode=0在这里的作用又是什么呢?
云中雁荡山 2010-01-19
  • 打赏
  • 举报
回复
顺便问一下,
event.returnValue = false ;


就是让响应的事件不执行。
默认是 event.returnValue = true ;执行
抽风的凹凸曼 2010-01-19
  • 打赏
  • 举报
回复
顺便问一下,
event.returnValue = false ;
它的作用是什么呢?

测试的时候可以将 if(Ext.getCmp(obj.id)){
if(Ext.getCmp(obj.id).readOnly) {
event.keyCode = 0;
event.returnValue = false ;
}
}
这段删掉,它是在ext下才能运行
抽风的凹凸曼 2010-01-19
  • 打赏
  • 举报
回复
6楼代码有效,7楼作废。黑体部分在倒数第七行开始
抽风的凹凸曼 2010-01-19
  • 打赏
  • 举报
回复

if(document.addEventListener){
document.addEventListener("keydown",maskBackspace, true);
}else{
document.attachEvent("onkeydown",maskBackspace);
}

function maskBackspace(event){
var event = event || window.event; //标准化事件对象
var obj = event.target || event.srcElement;
var keyCode = event.keyCode ? event.keyCode : event.which ?
event.which : event.charCode;
if(keyCode == 8){
if(obj!=null && obj.tagName!=null && (obj.tagName.toLowerCase() == "input"
|| obj.tagName.toLowerCase() == "textarea")){
event.returnValue = true ;
if(Ext.getCmp(obj.id)){
if(Ext.getCmp(obj.id).readOnly) {
if(window.event)
event.returnValue = false ; //or event.keyCode=0
else
event.preventDefault(); //for ff

}
}
}else{
if(window.event)
event.returnValue = false ; // or event.keyCode=0
else
event.preventDefault();

}
}
}

抽风的凹凸曼 2010-01-19
  • 打赏
  • 举报
回复
整了半天,终于解决了ff下对backspace的屏蔽功能,代码贴出如下,注意黑体字部分,希望对大家有帮助!


if(document.addEventListener){
document.addEventListener("keydown",maskBackspace, true);
}else{
document.attachEvent("onkeydown",maskBackspace);
}

function maskBackspace(event){
var event = event || window.event; //标准化事件对象
var obj = event.target || event.srcElement;
var keyCode = event.keyCode ? event.keyCode : event.which ?
event.which : event.charCode;
if(keyCode == 8){
if(obj!=null && obj.tagName!=null && (obj.tagName.toLowerCase() == "input"
|| obj.tagName.toLowerCase() == "textarea")){
event.returnValue = true ;
if(Ext.getCmp(obj.id)){
if(Ext.getCmp(obj.id).readOnly) {
if(window.event)
event.returnValue = false ; //or event.keyCode=0
else
event.preventDefault(); //for ff

}
}
}else{
if(window.event)
event.returnValue = false ; // or event.keyCode=0
else
event.preventDefault();
//for ff
}
}
}
friendly_ 2010-01-19
  • 打赏
  • 举报
回复
把设置event.keyCode = 的地方都去掉就行。利用event.returnValue 就可以达到目的

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧