Связать с jQuery пользовательского интерфейса, используя автозаполнение.жить()
Я искал везде, но я не могу найти никакой помощи...
у меня есть некоторые текстовые поля, которые создаются динамически через JS, поэтому мне нужно привязать все их классы к автозаполнению. В результате мне нужно использовать новое .видео (опция).
в качестве примера, чтобы связать все элементы с классом .фу сейчас и будущее создал:
$('.foo').live('click', function(){
alert('clicked');
});
он принимает (и ведет себя) так же, как .связывать.)( Однако я хочу привязать автозаполнение...
этот не работает:
$('.foo').live('autocomplete', function(event, ui){
source: 'url.php' // (surpressed other arguments)
});
как я могу использовать .live () для привязки автозаполнения?
обновление
разобрался с багетной:
$(function(){
$('.search').live('keyup.autocomplete', function(){
$(this).autocomplete({
source : 'url.php'
});
});
});
12 ответов:
Если вы используете
jquery.ui.autocomplete.jsпопробуйте это вместо.bind("keydown.autocomplete") or .live("keydown.autocomplete")если не использовать
jquery.ui.autocomplete.jsи посмотреть, если он будет работатьЕсли это не относится, я не знаю, как тебе помочь бро
функция автозаполнения jQuery UI автоматически добавляет класс "ui-autocomplete-input" к элементу. Я бы рекомендовал живую привязку элемента к фокусу без "ui-autocomplete-input" класс для предотвращения повторной привязки к каждому событию keydown в этом элементе.
$(".foo:not(.ui-autocomplete-input)").live("focus", function (event) { $(this).autocomplete(options); });Edit
мой ответ теперь устарел с jQuery 1.7, см. комментарий Натана Струца для использования с новым
.on()синтаксис.
просто добавить, вы можете использовать
.livequeryплагин для этого:$('.foo').livequery(function() { // This will fire for each matched element. // It will also fire for any new elements added to the DOM. $(this).autocomplete(options); });
чтобы получить автозаполнение работает при динамической загрузке для
on()событие, используемое в jQuery > 1.7, используя синтаксис, который предоставляет Натан Струц в своем комментарии:$(document).on('focus', '.my-field:not(.ui-autocomplete-input)', function (e) { $(this).autocomplete(options) });здесь
.my-fieldявляется селектором для вашего элемента ввода автозаполнения.
.жить() не работает с фокусом. также клавиша вверх.автозаполнение не имеет никакого смысла. Вместо этого то, что я пробовал и работает это
$(document).ready(function(){ $('.search').live('keyup' , function() { $(this).autocomplete({ source : 'url.php' }); }); })это работает прекрасно.
вы не можете. .live () поддерживает только фактические события JavaScript, а не какие-либо пользовательские события. Это фундаментальное ограничение того, как .жить() работает.
вы можете попробовать использовать это:
$('.foo').live('focus.autocomplete', function() { $(this).autocomplete({...}); });
после чтения и тестирования ответов всех остальных я обновил его для текущей версии JQuery и сделал несколько настроек.
проблема с использованием keydown в качестве события, которое вызывает
.autocomplete()это то, что он не может автозаполнения для этой первой буквы, набранной. Использование фокуса-лучший выбор.еще я заметил, что все данные решения приводят к
.autocomplete()вызывается несколько раз. Если вы добавляете элемент динамически на страницу, которая не будет удален снова, событие должно быть запущено только один раз. Даже если элемент должен быть удален и добавлен снова, событие должно быть удалено, а затем добавлено обратно каждый раз, когда элемент удаляется или добавляется, чтобы фокусировка на поле снова не вызывала ненужного вызова.autocomplete()каждый раз.мой окончательный код выглядит следующим образом:
$(document).on('focus.autocomplete', '#myAutocomplete', function(e){ $(this).autocomplete(autocompleteOptions); $(document).off('focus.autocomplete', '#myAutocomplete'); });
автозаполнение-это не событие, а функция, которая позволяет функцию автозаполнения для текстового поля.
поэтому, если вы можете изменить js, который создает текстовые поля динамически, чтобы обернуть элемент textbox в качестве объекта jquery и вызвать автозаполнение для этого объекта.
Я только что заметил, что вы отредактировали свой пост с этим ответом. Это было очевидно для меня, поэтому я публикую его ниже для других. Спасибо.
$(function() { $('.search').live('keyup.autocomplete', function() { $(this).autocomplete({ source : 'url.php' }); }); });
это работает для меня:
$(function() { $('.item_product').live('focus.autocomplete', function() { $(this).autocomplete("/source.php/", { width: 550, matchContains: true, mustMatch: false, selectFirst: false, }); }); });
вы можете просто поместить автозаполнение внутри input live event, например:
$('#input-element').live('input', function(){ $("#input-element").autocomplete(options); });
Comments