Часто у меня есть элементы, привязанные к дополнительной функциональности, например:
$('.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 для начальной загрузки страницы и один для перепрограммирования новых элементов, которые генерируются динамически. Это не СУХОЙ код и не очень эффективный.
Это действительно единственный способ сделать это или есть другая лучшая практика? Моя интуиция подсказывает мне, что должно быть что-то более эффективное, чем это (также чтобы помочь высушить код).
обновить
Похоже, .live хорошо работает с .click, как объяснил Клетус.
$('.myfav').live("click", somefunction);
Но я попробовал это с пользовательскими плагинами, такими как .autocomplete, и это не сработало. Я пробовал это:
$('.myfav').live("click", autocomplete("somefile.php", {max: 15, mustMatch: true}));
Так что live не выглядит так, как будто он может обрабатывать эти пользовательские плагины (конечно, я могу ошибаться, пожалуйста, обновите, если вы что-то знаете)