很多时候,我的元素与附加功能挂钩,例如:
$('.myfav').autocomplete();
$('.myfav').datepicker();
$('.myfav').click(somefunction);
但是当通过一些代码动态生成这个类的更多实例时,新$('.myfav')
的已经死了,需要重新布线,所以我这样做:
$("#somelink").click(function(){
//generate 10 new $('.myfav') and append them to the DOM
//re-wire them again as in the block above
$('.myfav').autocomplete();
$('.myfav').datepicker();
$('.myfav').click(somefunction);
});
这意味着我最终拥有 2 个相同的代码块,1 个用于初始页面加载,另一个用于重新连接动态生成的新元素。这不是 DRY 代码,效率不高。
这真的是完成这项工作的唯一方法,还是有其他最佳实践?我的直觉告诉我必须有比这更有效的东西(也有助于 DRY 代码)。
更新
看起来 .live 与 .click 配合得很好,正如 cletus 所解释的那样。
$('.myfav').live("click", somefunction);
但我尝试使用自定义设置插件,如 .autocomplete,但没有成功。我试过这个:
$('.myfav').live("click", autocomplete("somefile.php", {max: 15, mustMatch: true}));
所以 live 看起来不能处理这些自定义插件(当然我可能是错的,如果你知道的话请更新)