JavaScript 防止事件冒泡
在我们书写一个弹窗的时候,我们往往需要点击弹窗的其他地方来隐藏弹窗。
通常我们会写成:
$(document).bind('click',function(){
$('.pop-box').hide();
});
“然并卵” , 这个时候我们就需要防止事件冒泡。
jQuery 里面提供了 return false; 和 event.stopPropagation(); 来防止冒泡。
通常我们会将 return false; 用在 form 表单提交验证上。
event.stopPropagation(); 来防止 点击事件 冒泡。
然而,我需要的功能需求是:
需求1:
- 点击某个按钮 出现弹窗;
- 点击弹窗周围, 弹窗隐藏(点击弹窗, 弹窗不隐藏);
- 点击弹窗上的 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
- 点击按钮出现 list 选择弹层,
- 点击 list 选项后,操作选项, 隐藏弹层,
- 点击 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 防止事件冒泡的更多相关文章
- JavaScript 阻止事件冒泡的实现方法
JavaScript 阻止事件冒泡,无使用其它插件来辅助,原生JS代码,考虑到浏览器的兼容性问题,这里对IE/火狐.Operating以及Chrome都有针对性的判断,代码如下: function c ...
- JavaScript(3)---事件冒泡、事件捕获
JavaScript(3)---事件冒泡与事件捕获 一.理解冒泡与捕获 假设有这么一段代码 <body> <div><p>标签</p> </div ...
- 浅谈javascript中事件冒泡与事件捕获
事件冒泡:一个事件会顺着他的层级一直往上传,一直传到document上为止,即从盒模型上看是从内到外的过程. 例: <!DOCTYPE html><html lang="e ...
- javascript阻止事件冒泡的兼容写法及其相关示例
//阻止事件冒泡的兼容写法 function stopBubble(e){ //如果提供了事件对象,则是一个非IE浏览器 if(e && e.stopPropagation) //因此 ...
- javascript 停止事件冒泡以及阻止默认事件冒泡
停止事件冒泡 function stopBubble(e) { // 如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) { // ...
- JavaScript阻止事件冒泡(兼容IE、Chrome、FF)
这里仅仅是一个简单代码demo,因为时间问题并未做深入研究,因为今天做项目时要用到阻止事件冒泡的内容,找了好多才找到一个可以使用的,特记录之. <!DOCTYPE HTML> <ht ...
- javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。
首先,弄明白js 当中,什么是事件,事件模型在js中是如何设计的.什么是事件冒泡? 什么是“事件冒泡”呢?假设这里有一杯水,水被用某种神奇的方式分成不同颜色的几层.这时,从最底层冒出了一个气泡,气泡会 ...
- javascript的事件冒泡【转】
出处:http://www.cnblogs.com/sanshi/archive/2009/02/18/1393165.html (感谢三生石上) 这是一个基础性的文章,使用Javascript观察D ...
- 探讨JavaScript的事件冒泡
JavaSciprt事件中有两个很重要的特性:事件冒泡以及目标元素. 当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发.这一过程被称为事件冒泡: ...
随机推荐
- 详解MYSQL数据库密码的加密方式及破解方法
MYSQL加密方式:http://blog.csdn.net/listeningsea/article/details/8139641
- Cloudera集群中提交Spark任务出现java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily错误解决
Cloudera及相关的组件版本 Cloudera: 5.7.0 Hbase: 1.20 Hadoop: 2.6.0 ZooKeeper: 3.4.5 就算是引用了相应的组件依赖,依然是报一样的错误! ...
- 面试常备题---二叉树总结篇(zt)
人生就像是一场长跑,有很多机会,但也得看我们是否能够及时抓牢,就像下面这样的代码: while(isRunning) { if(...){...} else if(...){...} ... else ...
- PHP.8-HTML+CSS(二)-HTML详解
HTML+CSS HTML参考手册[http://www.w3school.com.cn/tags/index.asp] 0.HTML主体标记 代码分为三部分编写 <html> 是网页文件 ...
- The Romantic Hero
Problem Description There is an old country and the king fell in love with a devil. The devil always ...
- SingletonBeanRegistry
// 给定一个存在的object对象,该Registry将它存储为一个单例的根据给定的beanName(给定的object已经完全初始化完成,在访问Registry的单例object时应该是同步的)v ...
- 【技巧性(+递归运用)】UVa 1596 - Bug Hunt
In this problem, we consider a simple programming language that has only declarations of onedimensio ...
- 自定义android Dialog
1.自定义Dialog: import android.app.AlertDialog; import android.app.Dialog; import android.content.Conte ...
- PHP面向对象:类型提示
PHP是弱类型语言,向方法传递参数时候也不太区分类型.这样的使用会引起很多的问题,PHP开发者认为,这些问题应该是由代码书写者在书写代码时进行检验以避免. 没有类型提示很危险 下面的代码可能会出现问题 ...
- Linux 命令 - cd: 切换工作目录
命令格式 cd [directory] 实例 a) 将工作目录切换成主目录. cd # 或 cd ~ b) 将工作目录切换成当前工作目录的父目录. cd .. c) 将工作目录切换成上一个的工作目录. ...