JavaScript中的事件代理
来源:互联网 发布:淘宝手机店铺模板下载 编辑:程序博客网 时间:2024/06/12 00:37
转载请注明http://blog.csdn.net/b2997215859/article/details/51159069
首先,事件有三个阶段:捕获、目标、冒泡(不了解的自行搜索)。
那么,当我需要给ul下1000个li都要绑定点击事件,应该用for循环遍历?答案当然no。就算可以,但是你要明白,这么做是要承担足够大的性能风险,因为首先你得用getElementByTagName("li")获取1000个li,返回得到一个动态数组,然后遍历该数组。要知道,DOM操作返回的dom虽然是数组,但是却没有不同的new Array()得到的数组性能好,遍历的时候,会造成性能问题。
那么,怎么解决“绑定点击事件“这个问题呢?
我们是否可以将点击事件绑定到ul上,当点击任一li的时候,事件会冒泡,触发父级元素ul的点击事件,这样的话,我们关注的焦点就变为,如何在ul的点击事件中知晓点击了哪一个li。
其实很简单,获取事件的目标即可,如下代码
window.onload = function(){var oUi = document.getElementsByTagName("ul");oUi[0].onclick = function(e){var e = e || window.event;var target = e.target || e.srcElement;if(target.tagName.toLowerCase() == "li"){alert(target.nodeName);target.innerText = "hello";}}}
这就是比较简单的事件代理。
根据http://blog.csdn.net/weinideai/article/details/3835839这篇博文,它有俩个优势和俩个缺点:
其一、减少内存中事件处理器,这样会提高页面加载的性能,减少页面崩溃的可能
其二、如果动态生成某个元素,并且需要为此元素绑定事件的时候,利用事件代理会减少代码的冗长。
同样,a coin has two sides.
它也可能会带来性能瓶颈:
其一、并不是所有事件都是冒泡的,如blur、focus、load、unload等等并不能像其他事件一样冒泡,实际上,blur和focus是属于捕获事件。
其二、在对鼠标mouseout、mouserover等情况下,会出现很怪异的问题。
- JavaScript中的事件代理
- javaScript中的事件代理
- 关于JavaScript中的事件代理
- 关于JavaScript中的事件代理
- javascript中的事件委托(代理)
- javascript中的事件委托(代理)
- javascript事件代理javascript
- js---JavaScript中的事件委托/事件代理,如何通过事件委托进行异步DOM事件监听
- JavaScript的事件代理
- JavaScript的事件代理
- JavaScript的事件代理
- javascript 事件代理初探
- Javascript事件代理
- JavaScript的事件代理
- javascript的事件代理
- JavaScript的事件代理
- JavaScript事件代理入门
- javascript事件代理
- Android天气预报程序(三)
- 使用苹果airport路由器的WDS功能扩展wifi覆盖范围的设置方法
- bzoj 4499: 线性函数
- Correct Solution?
- NSRunloop创建常驻的线程
- JavaScript中的事件代理
- 创建CFRunLoopObserverRef
- Objective-C之NSNotification Center(通知中心)
- cocos2dx抗锯齿与渲染冲突——待解决
- Java使用LinkedList模拟一个堆栈或者队列数据结构。
- 小小图片爬虫
- 雪花飘落的动态效果
- 二维数组做参数问题
- CFRunLoopObserverRef