Chinaunix首页 | 论坛 | 博客
  • 博客访问: 557901
  • 博文数量: 48
  • 博客积分: 4026
  • 博客等级: 上校
  • 技术积分: 622
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-26 13:59
文章分类

全部博文(48)

文章存档

2011年(3)

2010年(6)

2009年(12)

2008年(27)

我的朋友

分类: 系统运维

2008-09-05 11:39:11

最近在做项目时,发现一个奇怪的问题,就是如果某个页面有两个控件,比如日期控件和人员选择树控件,这两个控件都采用javascript中点击任意处关闭的事件,结果发现当两个控件都打开后,先关闭其中一个,后一个点击任意处将不能关闭。
 
关闭树的代码如下:

//任意点击时,调用一个方法
document.onclick=doc_onclicks;
function doc_onclicks(){//当树控件展示时,关闭它

if (document.all.project_type_tree.style.display!="none"){
  with(window.event){
if(srcElement.tagName!='SPAN' && srcElement.tagName!='IMG')        {
        if(document.activeElement!=document.all.selectTypeByImg && srcElement.type!='checkbox'){
                     closeTree();
             }
         }
     }
    }
}

关闭日期控件的代码如下:

document.onclick = function(e) { //任意点击时关闭该控件 ,兼容了FF和IE

            e = window.event || e;
            var srcElement = e.srcElement || e.target;
            if(button!=null){
                if(srcElement != button && srcElement.getAttribute("extatt") == null){
                    showAllSelect();
                    dd.hide();
                }
            }else{
                if(srcElement != th && srcElement.getAttribute("extatt") == null){
                    showAllSelect();
                    dd.hide();
                }
            }
        }
        
    }

分析了代码,原因可能与document.onclick上注册的事件是同一个,即第一个控件触发了

关闭事件后,第二个控件调用的关闭事件仍然是前面的那个,所以无法关闭当前的控件。

 

解决办法:

其中一个控件重新注册事件:

代码如下:

 

 

document.body.attachEvent('onclick',doc_onclick);
function doc_onclick(){//当树控件展示时,关闭它

    if (document.all.project_type_tree.style.display!="none"){
     with(window.event){
         if(srcElement.tagName!='SPAN' && srcElement.tagName!='IMG'){
             if(document.activeElement!=document.all.selectTypeByImg && srcElement.type!='checkbox'){
                     closeTree();
             }
         }
     }
    }
}

阅读(1668) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~