本帖最后由 bigcctv 于 2010-11-02 10:25:14 编辑

解决方案 »

  1.   

    把所有事件处理程序写到document中,不是说写N个,而是只用document事件,比如:10个按钮要10个onclick事件,而document只要一个onclick事件,冒泡到document,就可以用target.id区分点击的是哪个按钮,那么LZ所疑惑的两个问题都不存在
      

  2.   

    事件代理<div id="clickid">
    <img id="1" src="http://gg.blueidea.com/2010/ewsidc/380_104.gif" alt="" />
    <img id="2" src="http://gg.blueidea.com/2010/ewsidc/380_104.gif" alt="" />
    <img id="3" src="http://gg.blueidea.com/2010/ewsidc/380_104.gif" alt="" />
    </div>
    <script>
    document.getElementById('clickid').onclick = function(e){
    e = e||event;
    var t = e.target||e.srcElement;
    if(t.tagName.toLowerCase()=='img')alert('我的id是' + t.id);
    }
    </script>
      

  3.   

    是啊~~~但是document那个onclick对象会变得很大吧??而且如果我以后删除了某些button的话,它的处理程序仍然存在于document,所以依然占用内存吧??而分别设置处理程序的话,在删除之前可以通过button.onclick=null;使其处理程序占有的内存被回收~~
    不知道我的理解对不。。?
      

  4.   

    个人认为,把所有事件都写到document,很难维护!
    页面事件多了,document事件中海要加很多判断!这些大量的判断反而还影响性能!
      

  5.   

    没人要你全部写在一个document里面。
    这是极端做法。
    就好像人家告诉你,创建对象消耗内存,你就不创建对象了?
    事件代理只是在合适的使用使用。
    就想在table里,给每个td添加一个onclick事件,那一百个单元格是多少个onclick?
    而给table写一个onclick来代理td的事件就可以节省很多内存。
    切忌咬文嚼字。
      

  6.   

    一个document事件,根据id的不同执行不同的方法。
    应该方便了管理,因为所有的事件都在document中处理
    只是当事件多了,document的事件就显得过于的臃肿
    lz可以根据实际需要进行权衡
      

  7.   

    尽量少访问DOM,可以大大节约内存,提高效率