在我们书写一个弹窗的时候,我们往往需要点击弹窗的其他地方来隐藏弹窗。

通常我们会写成:

  $(document).bind('click',function(){
$('.pop-box').hide();
});

“然并卵” , 这个时候我们就需要防止事件冒泡。

jQuery 里面提供了 return false; 和 event.stopPropagation(); 来防止冒泡。

通常我们会将 return false; 用在 form 表单提交验证上。

event.stopPropagation(); 来防止 点击事件 冒泡。

然而,我需要的功能需求是:

需求1:

  1. 点击某个按钮 出现弹窗;
  2. 点击弹窗周围, 弹窗隐藏(点击弹窗, 弹窗不隐藏);
  3. 点击弹窗上的 X , 弹窗隐藏。

方法1: 利用遮罩层来,控制点击区域。

添加一个 cover 层,点击 cover 层的时候 隐藏弹层。

html

  <div class="cover"></div>
<div class="pop-box"><span class="x-btn">X</span></div>
<button class="pop-btn">POP</button>

css

  .cover {
display: none;
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 9998;
}
.pop-box {
position: absolute;
width: 400px;
height: 400px;
margin-left: 20px;
margin-top: 20px;
display: none;
z-index: 9999;
}

js

  $(function() {
$('.pop-btn').click(function() {
$('.pop-box, .cover').show();
});
$('.cover, .x-btn').click(function() {
$('.cover, .pop-box').hide();
});
});

效果预览

需求2

  1. 点击按钮出现 list 选择弹层,
  2. 点击 list 选项后,操作选项, 隐藏弹层,
  3. 点击 list 其他地方,隐藏弹层。

html

  <div class="subject-select select">
<div class="divselect" disabled="true">
<cite>请选择所授科目</cite>
<ul>
<li><a href="javascript:;" selectid="1">数学</a></li>
<li><a href="javascript:;" selectid="2">英语</a></li>
<li><a href="javascript:;" selectid="3">物理</a></li>
<li><a href="javascript:;" selectid="4">化学</a></li>
<li><a href="javascript:;" selectid="5">生物</a></li>
<li><a href="javascript:;" selectid="6">历史</a></li>
<li><a href="javascript:;" selectid="7">地理</a></li>
<li><a href="javascript:;" selectid="8">政治</a></li>
<li><a href="javascript:;" selectid="9">语文</a></li>
<li><a href="javascript:;" selectid="10">其他</a></li>
</ul>
</div>
<input name="subject" type="hidden" value="" class="inputselect" />
</div>
</div>

css

  .divselect {
width: 240px;
height: 40px;
z-index: 9900;
}
.divselect ul,
.divselect li {
margin: 0;
padding: 0;
font-size: 13px;
list-style: none;
} .divselect cite {
width: 206px;
height: 40px;
line-height: 40px;
display: block;
font-size: 14px;
cursor: pointer;
font-style: normal;
padding-left: 4px;
padding-right: 30px;
border: 1px solid #cccccc;
background: url(../image/xjt.png) no-repeat right center;
} .divselect ul {
width: 240px;
border: 1px solid #cccccc;
background-color: #ffffff;
position: absolute;
z-index: 20000;
margin-top: -1px;
display: none;
} .divselect ul li {
height: 24px;
line-height: 24px;
} .divselect ul li a {
display: block;
height: 24px;
color: #333333;
text-decoration: none;
padding-left: 10px;
padding-right: 10px;
} .divselect ul li a:hover {
background-color: #CCC;
}

js

  (function($) {
$.extend($.fn, {
divselect: function(divSelect, inputSelect, callback) {
var $that = $(this);
$that.find('cite').click(function(event) {
$that = $(this).parents('.select');
var ul = $that.find('ul');
if (ul.css('display') === 'none') {
ul.slideDown('fast');
} else {
ul.slideUp('fast');
}
event.stopPropagation();
});
$that.find('ul li a').click(function(event) {
var txt = $(this).text();
$that.find('cite').html(txt);
var value = $(this).attr('selectid');
$that.find('.' + inputSelect).val(value);
$that.find('ul').hide();
});
$(document).click(function(event){
$that.find('ul').hide();
event.stopPropagation();
});
}
});
}(jQuery)); $(function() {
$('.select').divselect('divselect', 'inputselect', function(){});
});

效果预览

JavaScript 防止事件冒泡的更多相关文章

  1. JavaScript 阻止事件冒泡的实现方法

    JavaScript 阻止事件冒泡,无使用其它插件来辅助,原生JS代码,考虑到浏览器的兼容性问题,这里对IE/火狐.Operating以及Chrome都有针对性的判断,代码如下: function c ...

  2. JavaScript(3)---事件冒泡、事件捕获

    JavaScript(3)---事件冒泡与事件捕获 一.理解冒泡与捕获 假设有这么一段代码 <body> <div><p>标签</p> </div ...

  3. 浅谈javascript中事件冒泡与事件捕获

    事件冒泡:一个事件会顺着他的层级一直往上传,一直传到document上为止,即从盒模型上看是从内到外的过程. 例: <!DOCTYPE html><html lang="e ...

  4. javascript阻止事件冒泡的兼容写法及其相关示例

    //阻止事件冒泡的兼容写法 function stopBubble(e){ //如果提供了事件对象,则是一个非IE浏览器 if(e && e.stopPropagation) //因此 ...

  5. javascript 停止事件冒泡以及阻止默认事件冒泡

    停止事件冒泡 function stopBubble(e) { // 如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) { // ...

  6. JavaScript阻止事件冒泡(兼容IE、Chrome、FF)

    这里仅仅是一个简单代码demo,因为时间问题并未做深入研究,因为今天做项目时要用到阻止事件冒泡的内容,找了好多才找到一个可以使用的,特记录之. <!DOCTYPE HTML> <ht ...

  7. javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。

    首先,弄明白js 当中,什么是事件,事件模型在js中是如何设计的.什么是事件冒泡? 什么是“事件冒泡”呢?假设这里有一杯水,水被用某种神奇的方式分成不同颜色的几层.这时,从最底层冒出了一个气泡,气泡会 ...

  8. javascript的事件冒泡【转】

    出处:http://www.cnblogs.com/sanshi/archive/2009/02/18/1393165.html (感谢三生石上) 这是一个基础性的文章,使用Javascript观察D ...

  9. 探讨JavaScript的事件冒泡

    JavaSciprt事件中有两个很重要的特性:事件冒泡以及目标元素. 当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发.这一过程被称为事件冒泡: ...

随机推荐

  1. Python 计算程序运行时间

    import time def start_sleep():    time.sleep(3) if __name__ == '__main__':    #The start time     st ...

  2. js工作中编程习惯

    在前端编程中总结的习惯不管js还是css 还是后端开发这几点都是必须要做到的做好这几点不管去什么公司都是受到别人的尊重 善用变量,尤其是对DOM结构中的ID以及CLASS 多写注释,自己不熟,前面写后 ...

  3. python(5)–sys模块

    sys.argv 命令行参数list, 第一个元素是程序本身路径 sys.exit(n) 退出程序,退出时输入信息n sys.version 获取python解释程序的版本信息 sys.maxint ...

  4. 给jdk写注释系列之jdk1.6容器(12)-PriorityQueue源码解析

    PriorityQueue是一种什么样的容器呢?看过前面的几个jdk容器分析的话,看到Queue这个单词你一定会,哦~这是一种队列.是的,PriorityQueue是一种队列,但是它又是一种什么样的队 ...

  5. [改善Java代码]若有必要,使用变长数组

    Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用的时候非常不方便.比如要对一个班级的学生信息进行统计,因为我们不知道班级会有多少个学生(随时可能有退学,入学,转学),所以需要一 ...

  6. ExecutorService.invokeAny()和ExecutorService.invokeAll()的使用剖析

    ExecutorService是JDK并发工具包提供的一个核心接口,相当于一个线程池,提供执行任务和管理生命周期的方法.ExecutorService接口中的大部分API都是比较容易上手使用的,本文主 ...

  7. Centos系统使用代理上网时 yum的代理设置

    yum的存在使centos上软件的安装.配置.升级.卸载变得十分的方便,但是当安装centos的机器是通过代理服务器访问外网的话,yum的 使用就变得无从下手了,以下介绍以下怎样为yum配置代理地址及 ...

  8. vsftp实现ftps加密传输数据

    FTP明文传输数据,不太安全,ftp+ssl可以实现传输加密=ftps 01.创建FTP用户 user -d /ftp_www  -s /sbin/nologin mvpbang echo " ...

  9. winform版简易http服务器

    传人url运行(url以/结尾,例如:http://localhost:8080/web/ 监听这个url// 在浏览器 中输入 http://localhost:8080/web/?name=tes ...

  10. sql防注入式

    SQL注入式攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql命令以及进行其他方式的攻击动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因.比如: 如果你的查询语句是 ...