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事件中有两个很重要的特性:事件冒泡以及目标元素. 当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发.这一过程被称为事件冒泡: ...
随机推荐
- focusky 购买指南
升级Focusky动画演示大师 所有版本一次购买,终身使用,无限制作,免费升级.支付方式:支付宝.淘宝.银行转账.支付宝付款:点击表格中的“立即购买“进入购买页面->选择版本.数量,并填写详细的 ...
- RTB实时竞价广告是未来趋势
原文:http://www.inboundjournals.com/rtb-real-time-bidding-the-future-of-online-advertising/ [资讯图表] RTB ...
- Android & Eclipse FAQ
一.eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法 当我要格式化代码的时候,右键-source-format能够起效,但ctrl+shift+f不好使了. google之后来发 ...
- CentOS下通过locale来设置字符集
转载:http://www.centoscn.com/CentOS/config/2013/1013/1784.html 在Centos中通过locale来设置程序运行的不同语言环境,locale由A ...
- 使用coreData
1.设计数据模型 2.创建持久化视图和控制器 #import "BIDViewController.h" #import "BIDAppDelegate.h" ...
- ibatis中isEquals、isNotEmpty的用法
一:isEquals用于动态拼接sql 如下实例: 如果status的状态为0,则更新attribute1;状态为1,则更新attribute2; 状态为2,则更新attribute3. <up ...
- [改善Java代码]不同的列表选择不同的遍历方法
一.场景: 我们来看一个场景,统计一个省的各科高考科目考试的平均分. 当然使用数据库中的一个SQL语句就能求出平均值,不过这个不再我们的考虑之列,这里只考虑使用纯Java的方式来解决.(由于我的机器配 ...
- webView中支持input的file的选择和alert弹出
alert()弹出 input的file现选择(特别说明:不同的android版本弹出的样式不同,选择文件后自动上传) webView.setWebChromeClient(new WebChrome ...
- 【SQL】关于存储过程调用过程中事务的点点滴滴
1.调用两个存储过程 ---------------------------------------------------------------- -- 表[dbo].[aaa_test]中[id ...
- Apache httpd开启SSL
https://my.oschina.net/xpbug/blog/197454 必要软件 apache httpd 2.4(windows) perl 5 (windows) openssl (wi ...