第二个绑定的事件减少了一个,每绑定一个事件,内存都会多笔开销的
//相对的再稍优化一下,会更好.就不会当this.id=='default'时,总是要先解绑,然后又再次绑定了
$('#switch button').click(function(){ 
    $('#switch')[this.id=='default' ? 'bind' : 'unbind']('click',togglea);  
}) 

解决方案 »

  1.   

    主要还是关系到冒泡。
    第一个:  父  id="switch"  事件常在
    无论点那个button,都会冒到switch. 1个子事件。第二个: 
    只有点到this.id=='default',才把事件绑上,然后,靠冒泡冒上去。
    因为 父  id="switch"  事件没了,所以,冒上去是空的。但同时也加了3个子事件
    总说来,他冒上去也没什么
    $.event.dispatch  -> 把event变$.Event 然后分析queue  其实这也不费劲。所以第二个好吗?
      

  2.   

    第一个 是2个子事件,而且永远是2个。
    第二个 随着button增加而增加。
      

  3.   

    看仔细看了下1.9版本的源码.像这种绑定,确实是使用.each方法分开绑定事件的.而不是我想像中的将事件委托在祖元素上,使用target进行判断的.所以同理,其实两种方法绑定的子事件是一样的.楼上朋友说的"第二个 随着button增加而增加。"同样也发生在第一个方法里就已有代码来说,个人比较偏向第二种的统一事件,区分对象的处理方法真要较真,可能以下这样比较好些.只绑定了两个事件,将解绑事件集成至#switch的click事件中进行处理.这样的话,一来少了事件绑定的开销,二来后面再增加同类事件的button也不需要在额外绑定事件
        $(function(){ 
            var togglea=function(event){ 
                if(!$(event.target).is('button')){ 
                    $('#switch button').toggleClass('select'); 
                }else if($(event.target).attr('id')!='default'){
                    $('#switch').unbind('click',togglea);
                } 
            };
            
            $('#default').click(function(){
                $('#switch').bind('click',togglea);   
            }).trigger('click');
        }) 
      

  4.   

    主要是冒泡,后面都是多余的,
    他那2段代码,我个人觉的都不好。
    至于代理好,还是绑定好,没几十个,说也没意义。至于说第二个好,是那父事件没了(只有 id="switch" 才存在),它冒上去时,没有函数要处理,所以就省了一些处理的东西(主要是jQuery那包装,也就是到你那个函数之前要封装的一些东西)。但如果,#narrow  还其他onclick事件,那就第一个好。