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 相关文章推荐
jQuery EasyUI API 中文文档 - Draggable 可拖拽
Sep 29 Javascript
使用js的replace()方法查找字符示例代码
Oct 28 Javascript
JS对img标签进行优化使用onerror显示默认图像
Apr 24 Javascript
javascript动态判断html元素并执行不同的操作
Jun 16 Javascript
node.js超时timeout详解
Nov 26 Javascript
学习使用bootstrap3栅格系统
Apr 12 Javascript
js判断是否为空和typeof的用法(详解)
Oct 07 Javascript
jQuery事件对象总结
Oct 17 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
May 27 Javascript
使用jQuery实现页面定时弹出广告效果
Aug 24 jQuery
jquery 键盘事件 keypress() keydown() keyup()用法总结
Oct 23 jQuery
Vue中使用matomo进行访问流量统计的实现
Nov 05 Javascript
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
2006/12/23 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
基于Django用户认证系统详解
2018/02/21 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
django框架两个使用模板实例
2019/12/11 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
外语专业毕业生自我评价分享
2013/10/05 职场文书
公司财务工作总结的自我评价
2013/11/23 职场文书
总会计师岗位职责
2014/02/19 职场文书
就业协议书范本
2014/04/11 职场文书
人力资源职位说明书
2014/07/29 职场文书
出国留学英文自荐信
2015/03/25 职场文书
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技