Функция live
в jQuery отлично подходит для динамического применения определенных обработчиков событий к выбранным элементам при изменении DOM, но, насколько мне известно, нет метода для выполнения / вызова функций для выбранных элементов, которые настроить обработчики событий (например, функцию autocomplete
в этом вопросе) ...
Итак, вам нужно сделать что-то вроде этого:
var J = jQuery.noConflict();
J(document).ready(function(){
J("#addproffield").click(function(){
var input = J("<div class='added-field'><input type='text' name='professor[]' size='25' value='' /> <a href='' class='remove-btn'>Remove field</a></div>");
J("#addprof").append(input);
//Next line is inefficient and requires the extra class attribute
//J(".professor").unbind().autocomplete({source:'autocomplete.php', minLength:1});
//This is better:
input.find("input").autocomplete({source:'autocomplete.php', minLength:1});
});
J(".remove-btn").live('click',function() {
J(this).parent().remove();
});
});
Я добавил класс professor
к каждому из элементов input
, потому что у вас не может быть действительного HTML с дублированными идентификаторами (а jQuery не обрабатывает дублированные идентификаторы).
Я также изменилстрока input.professor...
, так что события (onclick, mouseover и т. д.) удаляются из всех input
s с помощью class="professor"
, а затем функция автозаполнения применяется (снова) ко всем выбранным элементам.
Youможет быть в состоянии сделать следующее, но я не пробовал:
var input = J("<div class='added-field'><input type='text' name='professor[]' id='professor' class='professor' size='25' value='' /> <a href='' class='remove-btn'>Remove field</a></div>").autocomplete({source:'autocomplete.php', minLength:1});
J("#addprof").append(input);
РЕДАКТИРОВАТЬ: принял совет / ответ Ника и обновленный код выше и удалил id
и class
атрибутов