jq事件冒泡
来源:互联网 发布:linux 命令下载libgcj 编辑:程序博客网 时间:2024/05/16 18:39
事件冒泡:
当一个事件发生时,该事件总共有一个事件源,即引发这个事件的对象,一个事件不能凭空产生,这就是事件的发生。
当事件发生时,这个事件就要开始传播,从而能够达到处理这个事件的代码中,(例如我们给按钮的onclick属性赋一个函数的名字,就是让这个函数去处理该按钮的click事件)。
当事件在传播的过程中,找到了一个能够处理它的函数,此时可以说这个函数捕捉到了这个事件。那一个函数是如何捕捉一个事件呢?这个就涉及到事件的冒泡了。
为了更好的理解冒泡的概念,我建议你现在想象一下你的面前放着一杯水,但这杯水和我们平时看到的有点不同,它分为数层,每一层又分成一或多个区域,最顶层是我们熟悉的窗口对象(即window对象),下一层分为好几个区域(document对象、history对象等等),而document对象的下一层又分为多个子对象。 这些对象的层次关系构成了DOM中的对象树。
DOM树:
例如:按钮的click事件先寻找在按钮上是否有onclick属性的有意义的定义(即该属性指向一个存在的函数或一段可执行 的语句),如果有,执行这个函数或语句;然后事件继续向上传播,到达按钮的上一层对象(例如form对象或document对象,总之是包含了按钮的父对象),如果该对象也定义了onclick属性,则执行属性的值。
事件捕获中,事件首先会交给最外层的元素,接着再交给更具体的元素
事件冒泡中,当事件发生时,会首先发送给最具体的元素,在这个元素获得响应机会之后,事件会向上冒泡至更一般的元素,事件冒泡有时候会产生副作用。
什么浏览器采用的是“事件捕获”模式,而又有哪些采用的是“事件冒泡”模式呢?
最终出台的DOM标准规定应该同时使用这两种策略:首先,事件要从一般到具体进行捕获,钴,事件再通过冒泡返回DOM树的顶层。而事件处理可以注册到这个过程中的任何一部分。即,可以把事件处理程序注册到事件捕获阶段,也可以注册到事件冒泡阶段。
jquery中可以假定最具体的元素会首先获得响应事件的机会
阻止事件冒泡
表现事件冒泡的代码
<body><div id="divOne" onclick="alert('我是最外层');"> <div id="divTwo" onclick="alert('我是中间层');"> <a id="hr-three" href="http://www.baidu.com"mce_href="http://www.baidu.com" onclick="alert('我是最里层!')"> 点击我 </a> </div></div></body>
从这个代码就可以看出事件冒泡的过程,只点击了“点击我”,就会依次弹出“我是最里层—->我是中间层—->我是最外层—->然后再链接到百度. ”,本来只点击ID为hr_three的标签,但执行了三个alert的操作;过程:hr_three—->divTwo—->divOne。从最里层冒泡到最外层。
四种阻止冒泡的方法
1.even.stopPropagation();
<script src="jquery-1.10.1.min.js"></script><script> $(function(){ $("#hr_three").click(function(event){ event.stopPropagation(); }); });</script>
even.stopPropagation():终止事件在传播过程的捕获、目标处理或起泡阶段进一步传播。调用该方法后,该节点上处理该事件的处理程序将被调用,事件不再被分派到其他节点。
此时点击“点击我”,就阻止了事件冒泡,但不会阻止默认行为,会弹出“我是最里层”,然后链接到百度
2.return false;
<script src="jquery-1.10.1.min.js"></script><script> $(function(){ $("#hr_three").click(function(event){ return false; }); });</script>
点击“点击我”,会弹出“我是最里层”,但不会链接到百度
作用是:事件处理过程中,阻止了事件冒泡,也阻止了默认行为(比如刚才它就没有执行超链接的跳转)
3.event.preventDefault();
<script src="jquery-1.10.1.min.js"></script><script> $(function(){ $("#hr_three").click(function(event){ event.preventDefault(); }); });</script>
点击“点击我”,会发现它依次弹出:我是最里层—->我是中间层—->我是最外层,但最后却没有跳转到百度
作用是:事件处理过程中,不阻击事件冒泡,但阻击默认行为(它只执行所有弹框,却没有执行超链接跳转)
注:一个事件起泡对应触发的是上层的同一事件
如果在click事件中,在你要处理的事件之前加上e.preventDefault();那么就取消了行为(通俗理解:相当于做了个return操作),不执行之后的语句了。
- jq阻止冒泡事件
- jq事件冒泡
- JQ阻止事件冒泡
- jq冒泡事件解决方案的区别
- JQ阻止默认事件与阻止冒泡
- jq代码学习10--事件冒泡
- js事件冒泡与jq的live事件
- JQ在window系统事件冒泡处理--贴上demo代码
- Jq 事件
- jq的event事件
- JQ的事件
- JQ基础事件
- JQ事件对象
- jq 滚动到底事件
- JQ-事件-1
- JQ-事件-2
- jq 动态绑定事件
- jq事件绑定
- CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM)
- 回到顶部的几种写法
- BC1.2
- np.where和np.bincount详解
- redis zset ( [
- jq事件冒泡
- Oracle case when else
- 一种肯定能提高开发者编程能力的方法
- hdu 1568求斐波那契数的前4位 && hdu3117矩阵快速幂
- 深度神经网络(DNN)是否模拟了人类大脑皮层结构?
- RAS 工具类
- Cyrillic script
- ubuntu上pycharm缺少libcupti.so
- 图像滤波---双边滤波和导向滤波的推导与实践