事件冒泡的应用——jq on的实现
曾对jQuery中on的实现有所疑问,一直没有找到合适的实现方法,今日看《javascript高级程序设计》中的事件冒泡有了些思路。
针对于新增的DOM元素,JQ中若为其绑定事件就必须使用on方法,如$('#id').on('click','.item',function(){......}),这样当$('#id')被点击时,会发生事件冒泡,传递到$('#id')下的item并进行匹配,符合条件的会触发function(){.......}。
这里写一个简单的例子演示下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.box{width:500px; height: 500px; overflow: hidden; border: 1px solid #ddd; float: left; }
.item{width: 50px;height: 50px;background: #000;color: #fff;text-align: center; }
</style>
</head>
<body>
<div class="box" id="box"></div>
<div class="op">
<button id="add">添加</button>
<button id="remove">删除</button>
<button id="copy">复制首元素</button>
<button id="replace">替换尾元素</button>
</div>
</body>
</html>
<script>
var i = 0,
$ = function(id){ return document.getElementById(id); },
ele = function(){
var div = document.createElement('div');
div.className = 'item';
div.innerHTML = i++; return div;
},
// on事件,点击由item开始向上传递
// 传递到box时,触发了box的click事件
on = function($pele,ele,type,func){
$pele.addEventListener(type,function(e){
if( e.target.className == ele ){
func();
}
},false);
};
// 调用on事件
on($('box'),'item','click',function(){alert('点击成功!')}); // 添加元素
$('add').onclick = function(){
$('box').appendChild(ele());
} // 移动最后一个元素
$('remove').onclick = function(){
$('box').removeChild($('box').lastChild);
} // 复制首元素
$('copy').onclick = function(){
$('box').appendChild($('box').firstChild.cloneNode(true));
} // 替换最后一个元素
$('replace').onclick = function(){
$('box').replaceChild($('box').firstChild,$('box').lastChild);
}
</script>
例子写得比较粗陋,主要是验证一下思路!
事件冒泡的应用——jq on的实现的更多相关文章
- jq的事件冒泡
在页面上可以有多个事件,也可以多个元素响应同一件事, 事件冒泡引发的问题: 有些时候不想动用的事件,却因为事件冒泡而触发 解决问题: 1.事件对象 由于IE-DOM和标准的DOM实现事件对象的方法各不 ...
- jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载
jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载 一丶jQuery动画 show,hide, ...
- jq事件冒泡问题
在程序中使用事件对象非常简单,只需为函数添加一个参数,jquery代码如下: $("element").bind("click",function(event) ...
- jq 事件冒泡总结
什么是JS事件冒泡? 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个 ...
- js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )
在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”. 1..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器if ( ...
- 事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
一.事件冒泡定义 事件冒泡是指在一个对象触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那 ...
- JS中的事件冒泡——总结
一. 有话要说 事件冒泡这个话题已经被园子里的朋友说透了,已经没什么要讲的了,但是由于呢我这边有个小问题刚好跟这个事件冒泡有关,就突然性想写个总结:一方面是给自己增加印象,另一方面给园子的新手们,提供 ...
- JS中的事件、事件冒泡和事件捕获、事件委托
https://www.cnblogs.com/diver-blogs/p/5649270.html https://www.cnblogs.com/Chen-XiaoJun/p/6210987.ht ...
- Javascript和jquery事件--事件冒泡和事件捕获
jQuery 是一个 JavaScript 库,jQuery 极大地简化了 JavaScript 编程,在有关jq的描述中,jq是兼容现有的主流浏览器,比如谷歌.火狐,safari等(当然是指较新的版 ...
随机推荐
- TortoiseSVN设置Beyond Compare为版本比较、差异合并工具
打开乌龟的setting==>Diff Viewer 比较"D:\develop\Beyond Compare 4\BCompare.exe" %base %mine /ti ...
- vue 获取组件 和 dom 对象 ref/el
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 如何在Fragment中获取context
文章转载自http://blog.csdn.net/demonliuhui/article/details/51511136 这里仅供自己学习参考: Context,中文直译为“上下文”,SDK中对其 ...
- C#编译时,提示缺少NuGet包
A--还原Nuget包前,一定要确保你配置了该项目的包源:如果你没有那就找别人要吧. 工具-选项-Nuget包管理器-程序包源 B--配置编译时自动还原缺少的nuget包: 工具-选项-Nuget包管 ...
- *jQuery选择器总结(原创:最全、最系统、实例展示)
jquery选择器包括四部分:一.基本选择器二.层次选择器三.过滤选择器四.表单元素选择器 一.基本选择器1.ID选择器:$('#myDiv');2.类选择器:$('.className');3.元素 ...
- Fedora : multilib version problems found
摘自:https://smjrifle.net/fedora-fix-multilib-version-problems/ This error was due to duplicate packag ...
- APM浅析
APM(Application Performance Management & Monitoring)一种基于云的性能监控服务(SaaS),以非侵入式监听探针,收集应用关键指标,生成分析报表 ...
- 在 Ubuntu 上使用微信客户端
原文地址: http://www.myzaker.com/article/5979115d1bc8e08c30000071/ 在这个快速信息交互时代,无论是工作还是生活,都需要频繁的网络社交,而在中国 ...
- ps教程分享:一定要记住这20种PS技术!
一定要记住这20种PS技术!会让你的照片美的不行! 一种简单的数码照片后期润饰 1)打开图片,执行色像/饱和度(-40)降低饱和度. 2)新建一图层,将图层模式改为柔光,用画笔工具将需要润饰的部分画几 ...
- 将某视图View转换为UIImage
+ (UIImage *)getSharedScreenView{ UIWindow *screenWindow = [[UIApplication sharedApplication]keyWind ...