事件委托
2015-11-02 17:21
176 查看
事件委托
对“事件处理程序过多”问题的解决方案就是事件委托。事件委托利用了事件冒泡,只指定一个时间处理程序,就可以管理某一类型的所有事件。
一下面的HTML代码为例:
其中包含三个被单击后会执行的列表项。按照传统的做法,需要向下面这样为他们添加3个事件处理程序。
如果在一个复杂的web应用程序中,对所有可点击的元素都采用这种方式,那么结果就会有数不清的代码用于添加事件处理程序。此时,可以利用时间委托技术解决这个问题。使用事件委托,只需在DOM树中尽量最高的层次上添加一个时间处理程序,如下面的例子所示:
在这段代码里,我们使用事件委托只为ul元素添加了一个onclick事件处理程序。由于所有列表项都是这个元素的子节点,而且它们的事件会冒泡,所以事件最终会被这个函数处理。具体关于target等解释,请参考
/article/5560781.html
对“事件处理程序过多”问题的解决方案就是事件委托。事件委托利用了事件冒泡,只指定一个时间处理程序,就可以管理某一类型的所有事件。
一下面的HTML代码为例:
<ul id="mylinks"> <li id="goSomething">Go something</li> <li id="doSomething">Do something</li> <li id="sayHi">Say Hi</li> </ul>
其中包含三个被单击后会执行的列表项。按照传统的做法,需要向下面这样为他们添加3个事件处理程序。
var item1=document.getElementById("gosomething"); var item2=document.getElementById("dosomething"); var item3=document.getElementById("sayHi"); EventUtil.addhandler(item1,"click",function(){ location.href="http://www.wrox.com"; }); EventUtil.addhandler(item2,"click",function(){ document.title="I changed the document's title" }); EventUtil.addhandler(item3,"click",function(){ alert("hi"); });
如果在一个复杂的web应用程序中,对所有可点击的元素都采用这种方式,那么结果就会有数不清的代码用于添加事件处理程序。此时,可以利用时间委托技术解决这个问题。使用事件委托,只需在DOM树中尽量最高的层次上添加一个时间处理程序,如下面的例子所示:
var list=document.getElementById("mylinks"); EventUtil.addhandler(list,"click",function(event){ event=EventUtil.getEvent(event); var target=EventUitl.getTarget(event); switch(target.id){ case "doSomething": document.title="I change the document's title"; break; case "goSomewhere": location.href="http://www.wrox.com"; break; case "sayHi": alert("sayHi"); break; } })
在这段代码里,我们使用事件委托只为ul元素添加了一个onclick事件处理程序。由于所有列表项都是这个元素的子节点,而且它们的事件会冒泡,所以事件最终会被这个函数处理。具体关于target等解释,请参考
/article/5560781.html
相关文章推荐
- Warm up-HUD4612(树的直径+Tarjin缩点)
- [DB那些事]数据库加密
- eclipse设置备忘
- 第10周 项目1 - 二叉树算法库
- logstash elasticsearch output插件的bulk提交
- Java的字符串中对子字符串的查找方法总结
- 第十周实践项目3—利用二叉树遍历思想解决问题
- easyUI 关于自动添加一行的源码地址
- iOS面试题
- android中在指定的界面中插入引导页
- yii2 restful api搭建 实例
- Spring: @Transactional中的propagation属性
- BootStrap学习笔记-2
- 用Storm轻松实时大数据分析【翻译】
- 关于十六进制0x
- Android之NetworkOnMainThreadException异常
- Linux(Centos)Apache安装配置过程中可能出现的错误
- java 第三方库common系统详解
- 项目三——利用二叉树遍历思想解决问题(1)
- ubuntu更改用户密码