您的位置:首页 > Web前端 > JQuery

jQuery 事件委托

2017-08-15 17:57 281 查看
概念:

什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。

  举个列子:有三个同事预计会在周一收到快递。为签收快递,有两种办法:一是三个人在公司门口等快递;二是委托给前台MM代为签收。现实当中,我们大都采用委托的方案(公司也不会容忍那么多员工站在门口就为了等快递)。前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款。这种方案还有一个优势,那就是即使公司里来了新员工(不管多少),前台MM也会在收到寄给新员工的快递后核实并代为签收。

原理:

利用冒泡的原理,把事件加到父级上,触发执行效果。

作用:
1.性能要好
2.针对新创建的元素,直接可以拥有事件

使用情景:

1.为DOM中的很多元素绑定相同事件;
2.为DOM中尚不存在的元素绑定事件;

html:

<ul id="wrap">
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
<li>item5</li>
</ul>


Js:
$(function(){

// 普通事件
$('li').click(function(){
$(this).css('background', '#D4DFE6');
});

// 动态添加DOM节点
$('#addBtn').click(function(){
$('#wrap').append( $('<li>item'+ ($('li').length + 1) +'</li>') );
});

/**
* 事件委托
*/

// jQuery 1.9已废弃
/*$('li').live('click', function(){
$(this).css('background', '#D4DFE6');
});*/

// jQuery的delegate写法
$('#wrap').delegate('li', 'click', function(ev){

// this 指向委托的对象 li
$(this).css('background', '#D4DFE6');

// 找到父级 ul#wrap
$(ev.delegateTarget).css('border', '2px solid #f00');
});

// jQuery的on的写法
$('#wrap').on('click', 'li', function(ev) {
// this 指向委托的对象 li
$(this).css('background', '#D4DFE6');

// 找到父级 ul#wrap
$(ev.delegateTarget).css('border', '2px solid #f00');
})

// js原生写法
var _wrap = document.getElementById('wrap');
_wrap.addEventListener('click', function(ev){
var ev = ev || event;
if( ev.target.nodeName == 'LI' ) {
ev.target.style.background = '#8EC0E4';
console.log( ev.target.innerHTML );
}

// 找到父级 ul#wrap
this.style.border = '2px solid #f00';
});

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息