一个ul列表,里边有一个1000个li元素,如何为这1000个li元素添加click事件?
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
..........
<li>1000</li>
</ul>
(function(){
var a=document.getElementById('list');
var b=a.getElementsByTagName('li');
for(var i=0;i<b.length;i++){
b[i].addEventListener('click',function(e){
var c = e.target;
alert(c.innerHTML);
},false);
}
})();
首先想到的是,for循环为每一个li元素绑定click事件,但是现在有1000个li元素就会对页面的性能造成很大的影响。所以,我们要采用事件委托。具体来说,事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)。
(function(){
var a=document.getElementById('list');
a.addEventListener('click',function(e){
var b = e.target;
alert(b.innerHTML);
},false);
})();
参考文章:http://www.ituring.com.cn/article/467
http://www.cnblogs.com/super-d2/archive/2011/10/31/2230602.html
作为闭包使用的
(function(){
//独立作用域
})();
已知ab两个有序数组,a数组长度m,b数组长度n,请最多循环m n次找出a,b数组中相同的元素
对“事件处理程序过多”问题的解决方案就是事件委托。事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。