js学习笔记-事件代理

Posted enmeen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js学习笔记-事件代理相关的知识,希望对你有一定的参考价值。

通过事件委托,你可以把事件处理器绑定到父元素上,避免了把事件处理器添加到多个子级元素上。从而优化性能。

事件代理用到了事件冒泡和目标元素。而任何一个元素的目标元素都是一开始的那个元素。

这里首先要注意event的targetcurrentTarget的区别。

target:表示触发事件的元素。currentTarget:表示事件绑定的元素。

只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的对象而currentTarget指向当前事件活动的对象(一般为父级)。

例如

1 <div id="contain">
2         <ul>
3             <li class="zero">zero</li>
4             <li class="one">one</li>
5             <li class="two">two</li>
6             <li class="three">three</li>
7             <li class="four">four</li>
8         </ul>
9     </div>

将事件绑定在#contain。如果点击类名为three的li。则会的到如图所示的target值。

其中editCell(e)函数是简单的判断函数。getEventTarget()函数是返回目标元素e.target。应为在各个浏览器下获取目标元素的方法有差异。

function editCell(e) {
        var target = getEventTarget(e);
        if (target.tagName.toLowerCase() == \'li\') {
            var targetContent = target.innerhtml;
            alert(targetContent);
        }
    }

更加详细的请看http://www.cnblogs.com/silence516/archive/2009/09/03/delegateEvent.html本文的代码也是从这里学习到的

注意事项

要注意不是所有的事件都能冒泡。

以上是关于js学习笔记-事件代理的主要内容,如果未能解决你的问题,请参考以下文章

js学习笔记28----事件默认行为

js学习笔记:事件——事件流事件处理程序事件对象

js学习总结----事件委托和事件代理

Node-学习笔记

爬虫学习笔记(二十二)—— Mitmproxy

《JS高程》事件类型学习笔记