一、事件捕获:当某个元素出发某个事件,顶层对象document就会发出一个事件流, 随着DOM树的节点像目标元素节点流去,直到到达事件真正发生的目标元素。 css
二、事件目标:当到达目标元素以后,执行目标元素该事件相应的处理函数。node
三、事件冒泡:从目标元素开始,往顶层元素传播,途中若是有节点绑定了相应的事件处理函数, 这些函数就会被依次出发。jquery
(1)能够使用e.stopPropagation()(Firefox) 或者e.cancelBubble=true(IE)来组织事件的冒泡。dom
(2)判断event.target 是否等于event.currenttarget函数
因为js中对dom操做会产生事件冒泡,会形成内存泄露和性能消耗,使用事件委托能避免。性能
一个经典的例子:实现一个函数,当点击页面中的任何元素时都alert出元素的名称。this
function getElementName(){spa
var body = document.getElmentsByTagName("body")[0];对象
body.onclick = function(ev){事件
var event = ev || window.event;
var target = event.target || window.srcElement;
if(target){
alert(target.nodeName.toLowerCase())
}
}
}
第一种:原生js
var body = document.getElementByTagName('body')[0];
body.addEventListener('click',function(event){
event = EventUtil.getEvent(event);
var target = EventUtil.getTarget(event);
switch(target.id){
case "id_1": function(){};break;
case "id_2": function(){};break;
}
})
第二种:jquery
$('body').on('click','li',function(){ if(!$(this).attr('s')) { $(this).css('background','red'); $(this).attr('s',true); }else { $(this).css('background','#fff'); $(this).removeAttr('s'); } })