jQuery点击其他地方时菜单消失的实现方法


Posted in Javascript onApril 22, 2016

本文实例讲述了jQuery点击其他地方时菜单消失的实现方法。分享给大家供大家参考,具体如下:

<script type="text/javascript">
  function stopPropagation(e) {
    if (e.stopPropagation) 
      e.stopPropagation();//停止冒泡  非ie
    else 
      e.cancelBubble = true;//停止冒泡 ie
  }
  $(document).bind('click',function(){
    $('#test').css('display','none');
  });
  $('#test').bind('click',function(e){
  //写要执行的内容....?睦膊焕
    stopPropagation(e);//调用停止冒泡方法,阻止document方法的执行
  });
</script>

事情是这样的,比如我点击一个div显示出一个菜单,当点击其他地方,菜单消失,其中一个思路就是给document绑定上click事件,如果是点击div就显示菜单,如果是点击document就隐藏菜单,但是如果点击div也等于是点击了document,所以在点击div的事件里面执行完要执行的语句,然后终止js的冒泡,否则会既执行了div的点击事件,又继续冒泡到document事件上,执行了document的click的内容

我的意思就是div也属于document,所以点击div也是点击了document,所以在不进行任何限制的情况下,点击div的时候,div和document的方法都会执行,进行限制的具体内容就是在点击div的方法里面停止冒泡,具体方法就是用e.stopPropagation()→"适用于非ie"方法,如果是ie就是e.cancelBubble=true

还有一种思路就是在document的click方法中判断触发的源是哪一个,如果是div的话就不执行任何操作也就是return,如果不是div的话,那就将菜单隐藏具体如下

event对象包含了一个重要属性:target(W3C)/srcElement(IE),这个属性标识了触发事件的原始元素,思路二就是要利用这个属性。我们可以直接对document的click事件绑定事件处理程序,在事件处理程序中判读事件源是否为id==test的div元素或其子元素,如果是则方法return不做操作,如果不是则隐藏该div。

$(document).bind('click',function(e){
    var e = e || window.event; //浏览器兼容性
    var elem = e.target || e.srcElement;
    while (elem) { //循环判断至跟节点,防止点击的是div子元素
      if (elem.id && elem.id=='test') {
        return;
      }
      elem = elem.parentNode;
    }
    $('#test').css('display','none'); //点击的不是div或其子元素
});

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
AngularJS数据源的多种获取方式汇总
Feb 02 Javascript
关于vuex的学习实践笔记
Apr 05 Javascript
Vue.js实现微信过渡动画左右切换效果
Jun 13 Javascript
关于laydate.js加载laydate.css路径错误问题解决
Dec 27 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
Jan 18 Javascript
VueJs组件之父子通讯的方式
May 06 Javascript
vue插件实现v-model功能
Sep 10 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
Dec 12 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
Jul 28 Javascript
jquery实现淡入淡出轮播图效果
Dec 13 jQuery
利用 JavaScript 实现并发控制的示例代码
Dec 31 Javascript
vue动态设置路由权限的主要思路
Jan 13 Vue.js
JS验证逗号隔开可以是中文字母数字
Apr 22 #Javascript
JS简单循环遍历json数组的方法
Apr 22 #Javascript
JavaScript中数组去除重复的三种方法
Apr 22 #Javascript
IE和Firefox之间在JavaScript语法上的差异
Apr 22 #Javascript
动态加载JavaScript文件的两种方法
Apr 22 #Javascript
JavaScript记录光标在编辑器中位置的实现方法
Apr 22 #Javascript
在AngularJS中使用jQuery的zTree插件的方法
Apr 21 #Javascript
You might like
php中计算时间差的几种方法
2009/12/31 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
ucenter通信原理分析
2015/01/09 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
js 替换
2008/02/19 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
python使用win32com库播放mp3文件的方法
2015/05/30 Python
python SocketServer源码深入解读
2019/09/17 Python
基于Python实现扑克牌面试题
2019/12/11 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
英文自荐信格式
2013/11/28 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
市级文明单位申报材料
2014/05/07 职场文书
个人优缺点总结
2015/02/28 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js