2010-04-16 2 views
3

Я создал автозаполнение JQuery UI в соответствии с документами и работает для любого ввода с классом = «тег-элемент», который отображается на странице. Однако пользователь может добавлять входные данные в dom через JS, поэтому мне нужен способ привязать автозаполнение к новым динамически созданным входам с помощью делегата. Я не уверен, как это сделать, любые идеи будут оценены.jquery ui autocomplete с делегатом

Благодаря

+0

На мой взгляд, это решение пахнет, но я в конечном итоге просто оборачивать код в функции и вызов функции в полной функции после того, как новый вход закачиваться в DOM. Насколько я могу судить, мне придется изменить код для автозаполнения, чтобы он работал с делегатом. Я на 100% уверен, что есть лучший способ, поэтому это комментарий, а не как ответ. – Paul

ответ

7

Вы можете делегировать с «focusin» события для настройки вашего поля ввода.

See this post

+0

A ++++ купит снова. Спасибо за отличную ссылку. – Nathan

+2

И вот почему связь с ответом плохая ... – KrisF

+0

@ KrisF, вы взяли слова прямо из моего рта ... дословно! :-( – PeterKA

2

У меня был пойти на это, но не мог заставить его работать, вот моя попытка:

http://jsfiddle.net/uGdm2/

+0

просто добавьте: http://jsfiddle.net/uGdm2/3/, кажется, лучше, чем версия, которую вы цитировали :) –

+0

Я не думаю, что это лучше, нет. – HM2K

+0

у вас было несколько ошибок: http://jsfiddle.net/uGdm2/65/ javascript: void (0) работает лучше, чем javascript: false вы пропустили a) после первой функции. И вы не хотите клонировать (true), попробуйте clone(), и он не будет клонировать события. – Lathan

4

Для чего это стоит, вот что я в конечном итоге с помощью:

$('#some-container').delegate('input.to-autocomplete', 'focus', function(e) { 
    $(this).autocomplete({ 
     source: autocomplete_url 
     /* etc, etc */ 
    }); 
}); 
$('#some-container').delegate('input.to-autocomplete', 'blur', function(e) { 
    var target = $(this); 
    if (target.hasClass('ui-autocomplete-input')) { 
     target.autocomplete('destroy'); 
    } 
}); 

Моя надежда состоит в том, что это облегчит нагрузку на браузер, так как я автозаполнения (возможно) сотни элементов s off и on, а результат автозаполнения uls начинает складываться в противном случае.

1

Для меня следующие работали:

$('#autocomplete').on('focusin', 'input', function(){ 
    $(this).autocomplete({ 

    }); 
});