12-事件委托(事件代理)
什么是事件委托
通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。
举个列子:有三个同事预计会在周一收到快递。为签收快递,有两种办法:一是三个人在公司门口等快递;二是委托给前台MM代为签收。现实当中,我们大都采用委托的方案(公司也不会容忍那么多员工站在门口就为了等快递)。前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款。这种方案还有一个优势,那就是即使公司里来了新员工(不管多少),前台MM也会在收到寄给新员工的快递后核实并代为签收。
原理 :
利用冒泡的原理 , 把事件加到父级上 , 触发执行效果 .
作用:
1 . 性能要好
2. 针对新创建的元素 ,直接可以拥有事件
事件源:
跟this作用一样(他不用看指向问题 , 谁操作的就是谁) , event对象下的
使用情景 :
为DOM中的很多元素绑定相同事件 ;
为DOM中尚不存在的元素绑定事件;
示例 :
<body> <ul> <li class="wangzhe">马克波罗</li> <li>公孙离</li> <li>干将</li> </ul> </body> <script src="jquery.js"></script> <script type="text/javascript"> $(document).ready(function () { // 通过on()方法 $("ul").on("click","#namei,.wangzhe",function () { console.log(this); }); // 未来追加的元素 $("ul").append('<a id ="namei" >娜美</a>') }) </script>
语法 :
on(type,selector ,data,fn);
描述 : 在选定的元素上绑定一个或多个事件处理函数
参数解释 :
events(string) : 一个或多个空格分隔的事件类型
selector(string): 一个选择器字符串 , 用于过滤出被选中的元素中能触发事件的后代元素
data : 当一个事件被触发时 , 要传递给事件处理函数的 event.data
fn: 回调函数