您的位置:首页 > Web前端 > JavaScript

[置顶] js禁用回退键[backspace键]浏览历史跳转的解决办法

2015-06-19 18:38 573 查看
在做公司的CMS的时候出现了一些js的问题,其中有一个就是在页面非输入框中按下回退键[backspace键]时页面会跳转到上一页,但是上一页加载失败,说会话已过期,

问题描述到此结束.

 

解决办法:

第一直觉就是上网搜答案,但是结果不理想。

第二上论坛上看看有没有解决办法,到是找到一个类似的问你

 

‘在IE里按backspace键时如何知道是发生在input还是在中文输入法框?’

地址:http://www.iteye.com/problems/3272

 

问题类似,但是不是解决办法,还好的就是我根据他的思路自己试着找解决办法。

 

  多谢fuwang 

 

下面是我代码:

 

window.onload=function(){
/****************************
* 作者:q821424508@sina.com	*
* 时间:2012-07-12			*
* version:1.0				*
* 							*
****************************/
document.getElementsByTagName("body")[0].onkeydown =function(){
if(event.keyCode==8){
var elem = event.srcElement;
var name = elem.nodeName;

if(name!='INPUT' && name!='TEXTAREA'){
event.returnValue = false ;
return ;
}
var type_e = elem.type.toUpperCase();
if(name=='INPUT' && (type_e!='TEXT' && type_e!='TEXTAREA' && type_e!='PASSWORD' && type_e!='FILE')){
event.returnValue = false ;
return ;
}
if(name=='INPUT' && (elem.readOnly==true || elem.disabled ==true)){
event.returnValue = false ;
return ;
}
}
}
}

 

 

问题解决了,

使用说明:

1.把代码直接复制到页面,【页面必须含有body标签】

2.放到任意一个页面引用的js文件中【直接放到文件的最开始,或最后,不要放到方法里面,页面必须含有body标签】

 

以上为1.0版本,只支持IE:

-------------------------------------------------------分割线------------------------------------------------------------

 

以下为2.0版本,支持IE,firefox,chrome[这三款浏览器经过测试]等浏览器

 

(又修复了个不大不小的bug,现在是2.1)

 

 

window.onload=function(){
/****************************
* 作者:q821424508@sina.com	*
* 时间:2012-08-20			*
* version:2.1				*
* 							*
****************************/
document.getElementsByTagName("body")[0].onkeydown =function(){

//获取事件对象
var elem = event.relatedTarget || event.srcElement || event.target ||event.currentTarget;

if(event.keyCode==8){//判断按键为backSpace键

//获取按键按下时光标做指向的element
var elem = event.srcElement || event.currentTarget;

//判断是否需要阻止按下键盘的事件默认传递
var name = elem.nodeName;

if(name!='INPUT' && name!='TEXTAREA'){
return _stopIt(event);
}
var type_e = elem.type.toUpperCase();
if(name=='INPUT' && (type_e!='TEXT' && type_e!='TEXTAREA' && type_e!='PASSWORD' && type_e!='FILE')){
return _stopIt(event);
}
if(name=='INPUT' && (elem.readOnly==true || elem.disabled ==true)){
return _stopIt(event);
}
}
}
}
function _stopIt(e){
if(e.returnValue){
e.returnValue = false ;
}
if(e.preventDefault ){
e.preventDefault();
}

return false;
}

 

欢迎拍砖。

 

欢迎在自己的项目中使用,复制,传播,都可以,不过请注明出处。

 

 

-------------------------------------------------------------------------------------------------------------------------

 

版本升级:

当前版本 2.1 

修复firefox下无法删除input里面字符的bug

 

说明:

不知道为毛,在firefox下出现问题了,之前确定测试过,然后有一个童鞋说这个脚本在firefox下不能用,会出现上面所说现象,我说我调试下,但是后来他说又可以了,

不过经过我的测试这段脚本确实有问题,

确实会出现上述问题,不过是时有时无。

算了还是改一下吧,

 

出现问题的原因:

firefox下 var elem = event.relatedTarget || event.srcElement  无法获取到目标对象。

所以换成target属性来获取。

 

ok 欢迎继续使用 

有问题 请提出来 我来修复。

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: