当前位置:嗨网首页>书籍在线阅读

10-讨论

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.2.3 讨论

event.data用于为函数提供预先计算的值,这意味着传递给bind()的值在绑定时必须已经可用。为了处理更加“动态”的值,可以使用秘诀8.5中将要学习的另一种方法。

前一个问题的解决方案如下:

function buttonClicked(e){
   jQuery('div.panel').hide();
   jQuery('#panel'+e.data.panel).show();
   jQuery('#desc').text('You clicked the '+e.data.color+' button');
}
jQuery('#button1').bind('click',{panel:1, color:'red'}, buttonClicked);
jQuery('#button2').bind('click',{panel:2, color:'blue'}, buttonClicked);
jQuery('#button3').bind('click',{panel:3, color:'green'}, buttonClicked);

当然,也可以使用循环使这段代码更短。这种方法被某些编码人员称作“宏”(Macro),对于jQuery代码来说很常见。

这些宏确实能够缩短代码长度,有时候能够改进代码的可读性。但在另一些情况下,它们也会使代码完全不可读,所以使用它们要小心。

下面是可以采用的做法:

jQuery.each(['red','blue','green'], function(num, color){
   num++; // it's 0-index based
   jQuery('#button'+num).bind('click',function(e){
     jQuery('div.panel').hide();
     jQuery('#panel'+num).show();
     jQuery('#desc').text('You clicked the '+color+' button');
   });
})

正如你所看到的,这里不使用数据参数,因为实际上没有必要。代码现在更加简短了,但是改进不大,而且它没有更好的可读性。

结论是,对这种情况来说,两种方法都可以使用。根据不同的问题,某种方法可能优于(更短、更好理解或者更容易维护)另一种方法。