事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。

假设一个元素div,它有一个下级元素p。
<div>
  <p>元素</p>
</div>
这两个元素都绑定了click事件,如果用户点击了p,它在div和p上都触发了click事件,那这两个事件处理程序哪个先执行呢?事件顺序是什么? 两种模型
以前,Netscape和Microsoft是不同的实现方式。
Netscape中,div先触发,这就叫做事件捕获。
Microsoft中,p先触发,这就叫做事件冒泡。
两种事件处理顺序刚好相反。IE只支持事件冒泡,Mozilla, Opera 7 和 Konqueror两种都支持,旧版本的Opera's 和 iCab两种都不支持 。
事件捕获
当你使用事件捕获时,父级元素先触发,子级元素后触发,即div先触发,p后触发。
事件冒泡
当你使用事件冒泡时,子级元素先触发,父级元素后触发,即p先触发,div后触发。
W3C模型
W3C模型是将两者进行中和,在W3C模型中,任何事件发生时,先从顶层开始进行事件捕获,直到事件触发到达了事件源元素。然后,再从事件源往上进行事件冒泡,直到到达document。
程序员可以自己选择绑定事件时采用事件捕获还是事件冒泡,方法就是绑定事件时通过addEventListener函数,它有三个参数,第三个参数若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。
ele.addEventListener('click',doSomething2,true)
true=捕获
false=冒泡
传统绑定事件方式
在一个支持W3C DOM的浏览器中,像这样一般的绑定事件方式,是采用的事件冒泡方式。
ele.onclick = doSomething2
IE浏览器
如上面所说,IE只支持事件冒泡,不支持事件捕获,它也不支持addEventListener函数,不会用第三个参数来表示是冒泡还是捕获,它提供了另一个函数attachEvent。
ele.attachEvent
("onclick", doSomething2);
附:事件冒泡(的过程):事件从发生的目标(event.srcElement||event.target)开始,沿着文档逐层向上冒泡,到document为止。
事件的传播是可以阻止的:
• 在W3c中,使用stopPropagation()方法
• 在IE下设置cancelBubble = true;
在捕获的过程中stopPropagation();后,后面的冒泡过程也不会发生了~
3.阻止事件的默认行为,例如click <a>后的跳转~
• 在W3c中,使用preventDefault()方法;
• 在IE下设置window.event.returnValue = false;

$().on()的知识点补充:
  1.从jQuery 1.7开始,on()函数提供了绑定事件处理程序所需的所有功能,用于统一取代以前的bind()、 delegate()、 live()等事件函数。
    $().bind()直接绑定在元素上,和click,blur,mouseon一样的点击事件。
    $().live()是通过冒泡的方式来绑定到元素上的。更适合列表类型的,绑定到document DOM节点上。
    $().delegate()是更精确的小范围的使用事件代理。
   $().on()结合了这三个方法的优势摒弃了劣势。

  2.该函数可以为同一元素、同一事件类型绑定多个事件处理函数。触发事件时,jQuery会按照绑定的先后顺序依次执行绑定的事件处理函数。
  3. 阻止事件冒泡和事件委托的方法:
    A:return false。 
      在事件的处理中,可以阻止默认事件和冒泡事件。

    B:event.preventDefault()
      在事件的处理中,可以阻止默认事件但是允许冒泡事件的发生。

    C:event.stopPropagation().。
      在事件的处理中,可以阻止冒泡但是允许默认事件的发生。

最新文章

  1. 1.mysql基础之 php 连接
  2. oracle操作字符串:拼接、替换、截取、查找
  3. (step5.1.6)hdu 1272(小希的迷宫——并查集)
  4. 禁用 Windows Azure 网站中的 ARR 实例关联
  5. linux下开机不自动挂载指定分区
  6. 【经验分享】Hydra(爆破神器)使用方法
  7. java json字符串 获取value
  8. Servlet(七):session
  9. 模拟赛 yjqb
  10. C++ queue
  11. python虚拟环境 | virtualenv 的简单使用 (图文)
  12. 软件破解入门(暴力破解CrackMe)
  13. Ubuntu 16.04下安装zsh和oh-my-zsh
  14. 线程同步——用户模式下线程同步——Slim读写锁实现线程同步
  15. Spring Framework启动详解
  16. Arduino入门笔记(7):利用1602、1302实现时钟和定时器
  17. 深入浅出 JMS(三) - ActiveMQ 安全机制
  18. FreeNas FTP配置
  19. 将Excel的数据导入DataGridView中(转)
  20. 【BZOJ】2818: Gcd(欧拉函数+质数)

热门文章

  1. linux install jsoncpp0.5.0
  2. 【记录】【windows】下查看端口是否被占用并杀死该进程
  3. dd命令的使用
  4. LeetCode 912. 排序数组(Sort an Array) 43
  5. Service must be explitict android 5.0问题
  6. ArcGIS Engine开发鹰眼图的功能(代码优化篇)
  7. jquery获取form表单中的数据
  8. mouseleave和mouseout的区别
  9. Jmeter学习笔记(二十)——后置处理器XPath Extractor使用
  10. POSIX 使用互斥量和条件变量实现生产者/消费者问题