`
sophia_230
  • 浏览: 118706 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

关于点击任意处关闭某个控件的javascript的疑惑

阅读更多

最近在做项目时,发现一个奇怪的问题,就是如果某个页面有两个控件,比如日期控件和人员选择树控件,这两个控件都采用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();
             }
         }
     }
    }
}

分享到:
评论

相关推荐

    史上最强JavaScript日历控件正式版(无偿的永久的提供给大家免费使用,含全部源代码)

    功能强大的JavaScript日历控件 最关键的,无偿的永久的提供给大家免费使用,含全部源代码。 功能简介: 一、更人性化,更全面的功能 大部分日期控件都具备这些功能,但是本日历控件做的更全面,更人性化,并且速度...

    程序天下:JavaScript实例自学手册

    1.21 用JavaScript随机修改页面的标题 1.22 判断网页加载完毕 1.23 嵌入网页的播放器 1.24 设置指定网页为主页 1.25 使用JavaScript传递页面参数 1.26 页面被冻结 第 2章 按钮特效 2.1 页面刷新按钮 2.2 按回车调用...

    《程序天下:JavaScript实例自学手册》光盘源码

    1.21 用JavaScript随机修改页面的标题 1.22 判断网页加载完毕 1.23 嵌入网页的播放器 1.24 设置指定网页为主页 1.25 使用JavaScript传递页面参数 1.26 页面被冻结 第 2章 按钮特效 2.1 页面刷新按钮 2.2 按回车调用...

    原生js图片画廊组件之点击小图弹出大图并可左右切换

    原生js写的点击小图列表中的任意小图可弹出对应的大图,并支持点击左右按钮切换大图,也支持设置是否显示大图的分页控件。

    dhtmlxTabbar

    dhtmlxTabbar是一个用来创建基于TAB的动态导航界面的JavaScript tabbar 控件。此 激活了AJAX的UI组件使你能够为你的站点或WEB应用程序添加功能丰富和绚丽的 tabs. 在一个WEB页面上此控件能够很容易地被初始化,它使...

    漂亮的消息提示框 消息提示组件 Javascript写的

    6、页面select控件状态还原时保持原状态,即如果原来select就是隐藏的,则消息框弹出并关闭后该select仍保持隐藏状态,而只显示原本显示的select。 7、消息组件弹出时屏蔽除Tab和回车外的几乎所有键盘操作(包括F5)...

    ExtAspNet_v2.3.2_dll

    -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。 -修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。 -修正...

    利用Javascript实现一套自定义事件机制

    事件机制为我们的web开发提供了极大的方便,使得我们能在任意时候指定在什么操作时做什么操作、执行什么样的代码。 如点击事件,用户点击时触发;keydown、keyup事件,键盘按下、键盘弹起时触发;还有上传控件中,...

    javascript 选择文件夹对话框(web)

    这个OCX控件中提供了一个getFiles()方法,只要获取控件对象,然后调用getFiles()方法就可以获取对应路径下的所有文件,如下图: 该控件可以选择任意盘符下的任意文件夹,图中最下面的按钮时web中的input,通过web中...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。 -修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。 -修正...

    asp.net知识库

    C# 获取数据库中某个某个表的创建脚本 DbHelperV2 - Teddy的通用数据库访问组件设计和思考 也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取...

    PathTracedPong:使用WebGL的台式机和移动设备的实时路径跟踪游戏。点击播放-> https

    桌面控件 单击任意位置以捕获鼠标 将鼠标移至控制板 鼠标滚轮可将多莉相机移入或移出 点击“重力”按钮来模拟重力! 单击“难度”按钮以循环浏览3个难度级别 行动控制 滑动即可控制桨 捏入或拉出多莉相机 点击“重力...

    dreamweaver的各种组件

    Browse4redirct 页面自动重定向到某个地址 Moustrail 鼠标移动带有"轨迹" windowresizer 指定窗口的分辨率 Pageborder 设定页边距 ColourDethRedirect 根据访问者的的屏幕颜色数选定相应页面 Framewizard 制作...

    Calendar一个自定义灵活的日历选择器

    Calendar 自定义日历选择器,时间范围精确到日,可精准自定义设置每个日期的初始样式和点击后的回调,提供 "弹层模式" 和 "普通排列" 的两种模式。

    AntiGravity-Pool:第一款使用WebGL的台式机和手机实时路径追踪游戏。 点击播放-> https

    点击播放-> 桌面控件单击任意位置以捕获鼠标移动鼠标瞄准母球鼠标滚轮可将摄像头移入或移出多莉相机空格键进入拍摄模式。 电源会上下波动空格键再次拍摄! 当进行了射击并且球在移动时,WASD会在场景中飞行行动控制...

    YC++编译器网页浏览器

    能动态地调入或释放各种二进制功能模块,如控件。做到代码即调即用,节省内存。 使用YC可以开发各种应用软件,例如,图形图像软件、财务管理软件、通信软件、网页生成软件、中间件软件、数据库软件等等,总之...

    html入门到放弃笔记

    HTML + JavaScript + Ajax + CSS 赵旭 ... ...1、WEB基础知识(了解) 1、Internet - 网 由若干台电脑、手机、平板 通过 网线(WIFI) 连接起来的... 2、创建一个超链接,内容为 :学子商城的LOGO,点击时,在新标签页中打开...

    wxBlog:微信小程序版博客。可以实现点赞,收藏,评论回复,消息通知等。(微信搜索:jarry007)

    部分安卓)反馈内容直接发送到作者邮箱点击评论的任意位置即可跳转至回复界面文章页面双击导航栏回到顶部v1.2 (05/21)修复代码段无法换行问题修复反馈内容无图情况下无法发送的问题评论后延时触底解决消息提醒错误的...

    TheSentinel-2nd-Look:杰夫·克拉蒙德(Geoff Crammond)1986年标志性游戏《哨兵》的完整路径翻版,可在您的桌面浏览器中运行,单击以播放-> https

    点击播放-> 桌面控件单击任意位置以捕获鼠标将鼠标移至自由外观向右/向左箭头可打开/关闭相机光圈(景深效果) WASD,QZ在风景选择模式下飞行相机(在游戏模式下进入机器人时禁用) 按空格键可生成新的随机风景(在...

    js使用小技巧

    Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode ...

Global site tag (gtag.js) - Google Analytics