屏蔽"Backspace"(退格)键后退功能2008-01-17 16:18本来这个脚本不难,但是我接到的需求可不太容易实现
创建工单时,屏蔽"Backspace"键后退功能
需求描述: 创建工单时,光标在非文本框内,按"Backspace"键,整个页面会刷新,填写内容全部清空,应屏蔽此功能。
难点在于该页面并不是完全屏蔽掉退格键.而是有选择的屏蔽.
入下面图片中的页面
如果我把退格完全屏蔽掉的话.那用户输入时就不能删除错别字了,所以代码要复杂一点,要判断焦点的所在.
本来页面对象有个方法 hasFocus() , 这个本来应该挺好用的,但是在我的系统里这个方法无法识别.
算了,还有方法..就是判断当前对象是不是document的活动对象:var obj==document.activeElement
我怎么判断活动对象在哪个控件上呢?
没办法..遍历吧,每次按退格键都要遍历一次..除此外想不出别的办法了.,为了让它快一点.我只遍历FORM里的元素, 下面是我的脚本
<body οnkeydοwn="backspace();">
<form id="FORM_APPLAY" action="xxx">
xxxxxxx
</form>
</body>
<script language="JavaScript" type="text/JavaScript">
//在申请工单时.屏蔽退格键返回上一次浏览页面功能
function backspace(){
if(event.keyCode!=8){
event.returnValue=true;
return;
}
else{
//如果当前焦点在form里,退格键有效,否则无效
if(activeElement()){
//alert("焦点是否在form里: true ");
event.returnValue=true;
}else{
//alert("焦点是否在form里: false ");
event.returnValue=false;
}
}
}
function activeElement(){
var forms = document.getElementById("FORM_APPLAY");
if(forms!=null){
if(children(forms))
return true;
}
return false;
}
//迭代判断焦点所在
function children(obj){
if(obj==document.activeElement)
return false;
//如果有子元素
if(obj.hasChildNodes()){
for(var i=0;i<obj.childNodes.length;i++){
if(obj.childNodes[i]==document.activeElement&&obj.childNodes[i].tagName.toLowerCase()!="td"){
if(obj.childNodes[i].type.toLowerCase()=="text"||obj.childNodes[i].tagName.toLowerCase()=="textarea"){
return true;
}
}
if(children(obj.childNodes[i]))
return true;
}
}
return false;
}
</script>
创建工单时,屏蔽"Backspace"键后退功能
需求描述: 创建工单时,光标在非文本框内,按"Backspace"键,整个页面会刷新,填写内容全部清空,应屏蔽此功能。
难点在于该页面并不是完全屏蔽掉退格键.而是有选择的屏蔽.
入下面图片中的页面
如果我把退格完全屏蔽掉的话.那用户输入时就不能删除错别字了,所以代码要复杂一点,要判断焦点的所在.
本来页面对象有个方法 hasFocus() , 这个本来应该挺好用的,但是在我的系统里这个方法无法识别.
算了,还有方法..就是判断当前对象是不是document的活动对象:var obj==document.activeElement
我怎么判断活动对象在哪个控件上呢?
没办法..遍历吧,每次按退格键都要遍历一次..除此外想不出别的办法了.,为了让它快一点.我只遍历FORM里的元素, 下面是我的脚本
<body οnkeydοwn="backspace();">
<form id="FORM_APPLAY" action="xxx">
xxxxxxx
</form>
</body>
<script language="JavaScript" type="text/JavaScript">
//在申请工单时.屏蔽退格键返回上一次浏览页面功能
function backspace(){
if(event.keyCode!=8){
event.returnValue=true;
return;
}
else{
//如果当前焦点在form里,退格键有效,否则无效
if(activeElement()){
//alert("焦点是否在form里: true ");
event.returnValue=true;
}else{
//alert("焦点是否在form里: false ");
event.returnValue=false;
}
}
}
function activeElement(){
var forms = document.getElementById("FORM_APPLAY");
if(forms!=null){
if(children(forms))
return true;
}
return false;
}
//迭代判断焦点所在
function children(obj){
if(obj==document.activeElement)
return false;
//如果有子元素
if(obj.hasChildNodes()){
for(var i=0;i<obj.childNodes.length;i++){
if(obj.childNodes[i]==document.activeElement&&obj.childNodes[i].tagName.toLowerCase()!="td"){
if(obj.childNodes[i].type.toLowerCase()=="text"||obj.childNodes[i].tagName.toLowerCase()=="textarea"){
return true;
}
}
if(children(obj.childNodes[i]))
return true;
}
}
return false;
}
</script>