有了以上作为基础,事件委托应该是很简单了。什么是事件委托?对“事件处理程序过多”问题的解决方案就是事件委托。事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。例如,click事件会冒泡到document层次,也就是说,我们可以为整个页面指定一个onclick事件处理程序,而不必给每个可单击的元素分别添加事件处理程序。
举个经常举的例子,比如有如下代码:
<ul id='myLink'> <li id='a'> apple </li> <li id='b'> banana </li> <li id='c'> orange </li> </ul>需要的效果是每点击相应的<li>选项,alert它里面的单词,或许很简单:
var lis = document.getElementsByTagName('li'); for(var i = 0, len = lis.length; i < len; i++) { lis[i].onclick = function() { alert(this.innerHTML); }; }但是如上代码绑定了三个事件,我们知道每个事件绑定都需要占用一定的内存,更糟糕的是,如果在代码执行过程中,动态地又添加了一个li,这时它没有绑定click的事件,我们还需要手动添加!这时,我们就可以用到事件委托技术:
var f = document.getElementById('myLink'); f.onclick = function(e) { console.log(e.target.innerHTML); };好吧,就是这么简单!
JavaScript高级程序设计(第3版)高清完整PDF中文+英文+源码