博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
事件代理与事件处理流程
阅读量:5094 次
发布时间:2019-06-13

本文共 1506 字,大约阅读时间需要 5 分钟。

1.事件代理(事件委托)

定义:当我们要对多个元素添加事件时,可以将事件添加给它们的父节点,而将事件委托给父节点来触发函数。

 

如以上代码,要给li下的a注册事件,我们一般会将所有的a都注册事件,这样就非常麻烦。
##从最底层的标签开始找,所以找到的是a,不是li.
我们可以使用更简单的事件代理机制,当事件触发时,事件会被抛到上层父节点,我们通过检查事件目标对象target,来判断并获取事件源li。
##事件监听:通过addEventListener注册事件监听函数

// 获取父节点,并为它添加一个click事件var list=document.getElementById("parent-list");list.addEventListener("click",function(e) {// 检查事件源e.target是否为A//e.target意思是表示获取事件目标console.log(e.target.tagName);//,如果e.target存在且e.target的标签名是A(a要大写)if(e.target && e.target.tagName == "A") {// 真正的处理过程在这里alert("注册成功");}});

 

jquery中使用事件代理:

$("#parent-list").on("click","a",function(){alert("注册成功");}

 

2.事件处理流程

事件处理流程有3个阶段:
a.事件捕获阶段
当某个元素触发事件时,顶层对象document会发出一个事件流,沿着DOM节点树流向并直到到达事件真正发生的目标元素。事件捕获阶段,事件监听函数是不会触发的。

b.事件目标阶段

当到达目标元素以后,执行目标元素触发该事件相应的执行函数,如果没有绑定事件监听函数,那就不执行。

c.事件冒泡阶段

从目标元素开始,一直往顶层传播,途中如果有节点绑定了相应的事件处理函数,都会被执行。
如果要阻止事件冒泡,chrome和火狐使用e.stopPropagation() ,IE则使用window.event.cancelBubble = true。
js代码执行阻止事件冒泡,兼容ie火狐。
function myFn(){
window.event ? window.event.cancelBubble = true : e.stopPropagation();
}
##在ie浏览器中,window.event是全局变量,在非ie中,就需要自己传入一个参数(比如e)来获取event啦,所以就有了var e = e||window.event,同时兼容IE与谷歌.

3.阻止浏览器默认行为
谷歌的方法:e.preventDefault()
IE的方法:window.event.returnValue=false ;

function stopFn(){window.event ?window.event.returnValue=false : e.preventDefault() ;}

 

4.return false

javascript中return false只能阻止默认行为,不会阻止事件冒泡。
在jquery中,return false既可以阻止默认行为,又可以阻止事件冒泡。

转载于:https://www.cnblogs.com/sharkJan/p/7442354.html

你可能感兴趣的文章
网络的FIN_WAIT_2状态解释和分析
查看>>
事务的四种隔离级别
查看>>
ArchLinux安装配置
查看>>
Python-判断变量类型和继承链-type isinstance
查看>>
python_求1-2+3-4+......-100的值
查看>>
C#读取匿名对象的属性值的方法总结
查看>>
矩形覆盖
查看>>
【三十二】thinkphp之连接数据库、实例化模型
查看>>
转 jquery使用技巧小结
查看>>
风中的纸屑——阅读MDN中的HTML、CSS谈兼容(PC)
查看>>
莫比乌斯反演呓语
查看>>
接口与继承:不允许继承的类
查看>>
字符串相似度-C#
查看>>
eclipse远程连接hive
查看>>
struts2的核心和工作原理
查看>>
一些常用的算法库
查看>>
db2循环
查看>>
C#语言-04.OOP基础
查看>>
vs2015配置boost c++
查看>>
js学习总结----iscroll
查看>>