js学习笔记26----事件冒泡,事件捕获

事件冒泡 : 当一个元素接收到事件的时候,会把它接收到的所有传播给它的父级。一直到顶层window。这种现象称之为事件冒泡机制。出去的事件触发。

阻止冒泡 : 当前要阻止冒泡的事件函数中,调用 event.cancelBubble = true;

事件捕获 : ie下是没有的,在绑定事件中,标准下是有的。进来的事件触发。

给对象绑定函数的形式

1.给一个对象绑定一个事件处理函数:

obj.onclick = fn;

2.给一个对象的同一个事件绑定多个不同的函数:

ie : obj.attachEvent(事件名称,事件函数)

1.没有捕获

2.事件名称有on

3.事件函数执行的顺序 :标准ie --> 正序,非标准ie ---> 倒序

4.this 指向 window

标准 : obj.addEventListener(事件名称,事件函数,是否捕获)

1.有捕获

2.事件名称没有on

3.事件函数执行的顺序 :正序

4.this 指向触发该事件的对象

是否捕获:默认是false     false : 冒泡     true : 捕获

call 函数下的一个方法,call方法的第一个参数可以改变函数执行过程中的内部this的指向。

call 方法的第二个参数开始就是原来函数的参数列表。

事件捕获示例代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <title>事件捕获</title>
 5         <meta charset="UTF-8">
 6         <meta name="viewport" content="width=device-width, initial-scale=1">
 7         <script>
 8             window.onload = function(){
 9                 function fn1(){
10                     alert(this);
11                     alert(1);
12                 }
13                 function fn2(){
14                     alert(this);
15                     alert(2);
16                 }
17                 /*
18                 document.onclick = fn1;
19                 document.onclick = fn2; //后面的覆盖前面的
20                 */
21
22                 //ie写法
23                 //document.attachEvent(‘onclick‘,‘fn1‘);
24                 //document.attachEvent(‘onclick‘,‘fn2‘);
25
26                 //标准写法
27                 //document.addEventListener(‘click‘,‘fn1‘,false);
28                 //document.addEventListener(‘click‘,‘fn2‘,false);
29
30                 //兼容写法
31                 function bind(obj, evname, fn){
32                     if(obj.addEventListener){
33                         obj.addEventListener(evname, fn, false);
34                     }else{
35                         obj.attachEvent(‘on‘ + evname, function(){
36                             fn.call(obj);
37                         });
38                     }
39                 }
40                 bind(document,‘click‘,fn1);
41                 bind(document,‘click‘,fn2);
42             }
43
44         </script>
45     </head>
46     <body>
47         <div>
48
49         </div>
50     </body>
51 </html>

call示例代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <title>call</title>
 5         <meta charset="UTF-8">
 6         <meta name="viewport" content="width=device-width, initial-scale=1">
 7         <script>
 8             window.onload = function(){
 9                 function fn1(){
10                     alert(this);
11                 }
12
13                 function fn2(a,b){
14                     alert(this);
15                     alert(a+b);
16                 }
17
18                 //fn1();   //window
19                 //fn1.call();  //弹出window,此时就等同于fn1()
20                 //fn1.call(1); //弹出1,call的第一个参数为this的指向
21                 //fn2.call(1,4,10); //依次弹出1,14,如果函数有参数时,则第一个为this的指向,后面为函数带的参数
22                 fn2.call(null,4,10); //依次弹出window,14,第一个参数为null表示不改变this指向。
23             }
24
25
26         </script>
27     </head>
28     <body>
29         <div>
30
31         </div>
32     </body>
33 </html>
时间: 2024-08-06 16:04:23

js学习笔记26----事件冒泡,事件捕获的相关文章

JS学习笔记9之event事件及其他事件

-->鼠标事件-->event事件对象-->默认事件-->键盘事件(keyCode)-->拖拽效果 一.鼠标事件 onclick ---------------鼠标点击事件oncontextmenu------鼠标右键点击onmouseover --------鼠标移上onmouseout ---------鼠标移出onmousedown -------鼠标按下onmousemove -------鼠标移动onmouseup ----------鼠标抬起 1 <head

[JS学习笔记]浅谈Javascript事件模型

DOM0级事件模型 element.on[type] = function(){} 兼容性:全部支持 lay1 lay2 lay3 e.target:直接触发事件的元素[IE8及以下不支持taget属性,使用e.srcElement代替] e.srcElement:直接触发事件的元素[FF不支持srcElement属性,使用e.target代替] e.currentTarget:被间接触发的元素[IE8及以下不支持currentTarget属性,使用this代替] this:同e.current

[JS]笔记12之事件机制--事件冒泡和捕获--事件监听--阻止事件传播

-->事件冒泡和捕获-->事件监听-->阻止事件传播 一.事件冒泡和捕获 1.概念:当给子元素和父元素定义了相同的事件,比如都定义了onclick事件,点击子元素时,父元素的onclick事件也会被触发.js里称这种事件连续发生的机制为事件冒泡或者事件捕获.IE浏览器:事件从里向外发生,事件从最精确对象(target)开始触发,然后到最不精确的对象(document)触发,即事件冒泡 Netscape:事件从外向里发生,事件从最不精确的对象(document)开始触发,然后到最精确对象(

JS 事件冒泡、捕获。学习记录

作为一个转行刚到公司的新人,任务不多,这一周任务全部消灭,闲暇的一天也别闲着,悄悄的看起了书.今天写一下JS的事件冒泡.捕获. 也是今天看的内容有点多了,有些消化不了,就随手记录一下.纯属自我理解,如果有不对,还请指导提出,小弟一定改正. 好了,话不多说.那么事件冒泡是什么? 举个例子 ul > li > div > p . 这个时候你点击P,他会一层一层的往上执行,直到最后绑定事件的元素.假如我们绑定事件在ul上,那么点击P,他就会逐级往上走,直到找到绑定事件的ul也会触发事件,那么在

JS学习笔记-事件绑定

一.传统事件模型 传统事件模型中存在局限性. 内联模型以HTML标签属性的形式使用,与HTML混写,这种方式无疑造成了修改以及扩展的问题,已经很少使用了. 脚本模型是将事件处理函数写到js文件中,从页面获取元素进行对应事件函数的绑定以触发执行.但也存在不足之处: 1.一个事件绑定多个事件监听函数,后者将覆盖前者. 2.需要限制重复绑定的情况 3.标准化event对象 二.现代事件绑定 DOM2级事件定义了两个方法用于添加.删除事件:addEventListener().removeEventLi

Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)

笔记来自<Node入门>@2011 Manuel Kiessling JavaScript与Node.js Node.js事实上既是一个运行时环境,同时又是一个库. 使用Node.js时,我们不仅仅在实现一个应用,同时还实现了整个HTTP服务器. 一个基础的HTTP服务器 server.js:一个可以工作的HTTP服务器 var http = require("http"); http.createServer(function(request, response) { r

理解js事件冒泡事件委托事件捕获

js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <div id="col">    <p>        <a id="btn" href="#">button</a>    </p></div> <script> let b

关于dom 事件冒泡、捕获 dom事件三个阶段

本文主要解决两个问题: 什么是事件流 DOM事件流的三个阶段 起因 温故了一下我的<JavaScript高级程序设计>的时候,翻到DOM事件那一章,(说实话,现在无论是什么框架你都离不开操作DOM啊,毕竟这是你展示的最基本元素,就像人的细胞).想起了dom事件流原理,好多人不明白,只知道click mouseout等实用场景,真要理解和更进一步的前端是要必须:理论+实践 并行的. 当然,DOM事件所囊括的知识较为庞杂,所以本文专注与自己学习时所碰到的难点,DOM事件流. 流 流的概念,在现今的

11.30js高级事件冒泡事件捕获

面向对象 单列模式 工厂模式 构造函数 (1) 类 Js天生自带的类 Object 基类 Function Array Number Math Boolean Date Regexp String 1.事件 浏览器客户端上客户触发的行为都称为事件 所有的事件都是天生自带的,不需要我们去绑定,只需要我们去触发. 通过obj.事件名=function(){} 事件名:onmouseover onmouseout onmousedown onmousemove onmouseup Onclick  o