Ответ 1
$(target).autocomplete("destroy");
У меня есть форма с переменным числом полей автозаполнения, которые используют один и тот же список выбора. Эти поля добавляются и удаляются по мере необходимости. Всякий раз, когда изменяется параметр на странице, я (попробуйте) обновить список для всех полей, сначала вызвав unbind()
, затем autocomplete()
с новым параметром, добавленным к URL-адресу.
$('input.foo').unbind().autocomplete(url?new_param=bar);
Проблема заключается в том, что unbind(), похоже, не развязывает. Когда я ввожу в поле ввода, он пропускает всю историю событий автозаполнения.
Я также попробовал flushCache безрезультатно.
Как удалить старые события?
Спасибо.
$(target).autocomplete("destroy");
Попробуйте это
$ ('input.foo').unbind('.autocomplete').autocomplete ('url?new_param=bar') ;
Плагин автозаполнения добавляет функцию unautocomplete() для удаления autocomplete() из полей, которые у нее есть, поэтому она должна работать, если изменить код:
$('input.foo').unautocomplete().autocomplete('url?new_param=bar');
Эта функция unautocomplete() должна удалить все старые события.
jQuery предоставляет метод flushCache() (http://docs.jquery.com/Plugins/Autocomplete), чтобы удалить содержимое, уже сопоставленное с помощью автозаполнения.
Например, если используемый элемент html равен <input type="text" id="txtElement"/>
, и с ним связано автозаполнение. FlushCache может быть задан следующим образом: $("#txtElement").flushCache();
, и это решит проблему.
Если вы используете параметры, добавьте cacheLength и установите его в 1. Этот параметр не сохранит ни одну из возвращенных записей. Поверьте мне, это улучшило мою жизнь... на все 5 минут.
Я думаю, ваша проблема в том, что у вас нет формы, содержащей поле ввода автозаполнения. Если вы посмотрите в коде jquery.autocomplete.js, он $(input.form).unbind( ". Autocomplete" ); на unautocomplete(), что означает, что вход должен находиться внутри тега формы, чтобы работать.