对于指定区块div,如何区分区块内的点击 和 区块外的点击?
需求:对于区块div内点击事件, 需要展示区块内的附属操作区块,对于区块外的点击, 需要将前面说的附属操作区块隐藏掉。
分析:对于一般的HTML控件,有标准的js事件接口, focus和blur,来实现类似效果, 在focus中添加显示附属控件操作, 在blur中隐藏掉。例如 文本输入框, 和 image 类型的input, 但是对于设计出的样式不能通过这类控件来表达时候,就需要使用div框来设计布局,虽然HTML控件具有更好的accessibility。
技术思路:事件event在DOM树中是不断冒泡,向上层传递的,直到DOM根节点document停止,在事件发生或者传递的过程中, 任意传递路径上的DOM元素的事件处理函数, 中都可以终止事件扩散(propagation)。
验证冒泡传递消息机制,如下代码,执行效果,点击“click me”,事件踪迹会先打印 me is clicked,然后打印document is clicked。
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
</head>
<body>
<div id="target_div" style="width:200px;height:200px;background:yellow;margin:auto">click me</div>
<br/>
<br/>
<br/>
clicked event bubble up trace:
<div id="eventClickLog"></div>
<script>
$("#target_div").click(function(event){
$("<div/>").append("me is clicked")
.appendTo($("#eventClickLog"));
}); $(document).click(function(event){
$("<div/>").append("document is clicked")
.appendTo($("#eventClickLog"));
});
</script>
</body>
</html>
根据JQuery官方文档 http://api.jquery.com/event.stoppropagation/ 介绍 如下接口可以prevent事件向上传递
event.stopPropagation()
或者使用 return false 来实现相同的效果,这样点击区块内,只有打印 me is clicked, 点击区块外,只打印document is clicked,可满足区分区块点击事件区域的需求。给出拦截效果代码:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
</head>
<body>
<div id="target_div" style="width:200px;height:200px;background:yellow;margin:auto">click me</div>
<br/>
<br/>
<br/>
clicked event bubble up trace:
<div id="eventClickLog"></div>
<script>
$("#target_div").click(function(event){
$("<div/>").append("me is clicked")
.appendTo($("#eventClickLog")); /* return false or stopPropagation to prevent parent event handler executed. */
//return false;
event.stopPropagation();
}); $(document).click(function(event){
$("<div/>").append("document is clicked")
.appendTo($("#eventClickLog"));
});
</script>
</body>
</html>
对于指定区块div,如何区分区块内的点击 和 区块外的点击?的更多相关文章
- 在指定的div中搜索内容,并滚动显示到当前搜索到的内容处
我想要的是页面中有个带滚动条的div对象,里面有很多内容,想要用js搜索到div中的某个字符串内容,然后将div的滚动条滚动到搜索到的内容处显示,自动定位.先是查找页面中的内容,然后将找到的内容创建t ...
- jQuery加载一个html页面到指定的div里
一.jQuery加载一个html页面到指定的div里 把a.html里面的某一部份的内容加载到b.html的一个div里.比如:加载a.html里面的<div id=“row"> ...
- 使用jQuery加载html页面到指定的div
一.jQuery加载一个html页面到指定的div里 把a.html里面的某一部份的内容加载到b.html的一个div里.比如:加载a.html里面的<div id=“row"> ...
- 区块链侧链应用开发平台Asch节点安装及区块生产教程
1 系统要求 必须是linux系统 必须有公网ip 建议使用ubuntu 14.04 64位 建议内存1G以上 建议带宽2Mb以上 2 安装 2.1 下载 wget https://www.asch. ...
- 给指定的div增加滚动条
这次的需求是给一个指定的div(里面有个table表格)增加上下.左右的滚动条 通过查找资料后找到了一个可用的方法,代码如下: <!--div比table大小要小才会显示--> <d ...
- 都div在所有li的html()值被设置"哈哈",当点击设置"我被点击",其余的还是不点击设置“哈哈”
<1> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- 阿里云服务器 - node启动服务的时候只有监听内网IP才可以供外网访问
阿里云服务器 - node启动服务的时候只有监听内网IP才可以供外网访问
- c++学习笔记之基础---类内声明函数后在类外定义的一种方法
在C++的“类”中经常遇到这样的函数, 返回值类型名 类名::函数成员名(参数表){ 函数体.} 双冒号的作用 ::域名解析符!返回值类型名 类名::函数成员名(参数表) { 函数体. } 这个是在类 ...
- java打印出某一指定路径下的文件夹内的所有子文件夹和文件,并区分开来
public class printoutFile { public static void main(String[] args) { printFile(new File("D:\\te ...
随机推荐
- MySQL优化经验和方法汇总
一.服务器硬件对MySQL性能的影响 1.磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变. MySQL ...
- Codeforces Round #249 (Div. 2) B. Pasha Maximizes
看到题目的时候,以为类似插入排序,比较第i个元素和第i-1个元素, 如果第i个元素比第i-1个元素小,则不交换 如果第i个元素比第i-1个元素大,则交换第i个元素和第i-1个元素 继续比较第i-1个元 ...
- CDOJ 1437 谭松松的旅游计划 Label:倍增LCA && 最短路
谭松松的旅游计划 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- [BZOJ2790][Poi2012]Distance
2790: [Poi2012]Distance Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 225 Solved: 115[Submit][Sta ...
- Android -- TabHost
TabHost 也就相当于Windows下的选项框 有两种实现方式 1. 继承TabActivity (已经废弃):从TabActivity中用getTabHost()方法获取TabHost 2. ...
- docker warning ipv4 forwarding is disabled. networking will not work
# vi /etc/sysctl.conf 添加如下代码: net.ipv4.ip_forward=1 重启network服务 # systemctl restart network 查看 ...
- linux修改时区为中国时区(北京)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 模拟ATM机银行系统
淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...
- unity3d插件Daikon Forge GUI 中文教程6-高级控件richtextlabel的使用
3.5.richtextlabel文本 可以像Word文档一样编辑出多样的内容,图片,字体颜色大小下划线.超链接背景等等. Defaults: 默认字体 默认图集 Blank Texture :空白的 ...
- win10我能ping通他人,但他人ping不同我
这是防火墙的原因,关闭防火墙即可