简单的说,事件委托(event delegation)是在DOM上层(也就是在触发事件的元素的父元素上)定义事件的处理程序,而不是定义在触发事件的元素本身上。
首先我们来举这样一个例子:我有N个li元素,我想让点击过的li元素背景颜色都变为黄色。非常简单的一个例子是吧?
我们可以通过如下代码实现:
var oBox = document.getElementById('box'); var aLi = oBox.children; for(var i=0;i
var oBox = document.getElementById('box'); var aLi = oBox.children; oBox.onclick = function(ev){ var oEvent = ev || event; var oTarget = oEvent.target || oEvent.srcElement;//解决浏览器的兼容性问题 if(oTarget.tagName == 'LI'){ /*此处的'LI'是需要大写的,若要小写可将if内的判断条件改为(oTarget.tagName.toLowerCase == 'li')*/ oTarget.style.background = 'yellow'; } } 至此,最简单的事件委托举例就完成了~ (以下是摘自JavaScript忍者秘籍,给大家进行下专业性的总结~) 事件委托是一种开发更高性能,且可伸缩Web应用程序的最好技术。 因为事件冒泡(bubbling)是唯一一种在所有浏览器中都可以使用的技术(事件捕获(capturing)在IE9之前版本不可用),所以重要的是要确保将委托应用到事件目标元素的祖先元素上。这样才能 确保最终冒泡到所委托的元素上。 可惜的是,在很多浏览器中,submit、change、focus和blur事件的冒泡实现都有很严重的问题。比如在老版的IE浏览器中,submit和change事件根本没有冒泡,而兼容W3C DOM的浏览器对两个事件 都实现了冒泡。所以,如果我们使用事件委托,必须解决如何克服这些缺陷问题。大家都知道,兼容性问题是最头疼的一项任务,所以不是一两句话可以说的清的,在以后的学习中再慢慢跟大家交流吧~ 作为一前端个新人,也是初次写博客,肯定会有很多分析不到位的地方,小妹先提前谢谢各位前辈的批评指正。天色已晚,祝大家晚安~