Я столкнулся с этой проблемой и не смог использовать метод close (), потому что мое автозаполнение повторялось при каждой загрузке представления Backbone. Таким образом, новый элемент автозаполнения был добавлен к DOM и тем, кто застрял вокруг, даже несмотря на то, что присоединенный элемент ввода терялся и создавался заново. Избыточные элементы автозаполнения вызывали несколько проблем, но хуже всего было, когда пользователь нажимал клавишу ввода достаточно быстро, я должен был пройти через эту последовательность:
- Пользователь печатает текст
- Запрос предложений начинается исполнение
- Событие нажатия клавиши запускается и выполняет полнотекстовый поиск (пользователь не выбрал что-то из автозаполнения)
- Представление перезагружается, поле ввода и другие элементы перерисовываются, а новый элемент автозаполнения добавляется в конец DOM
- Исходный запрос предложений возвращается с ответом, и предложения отображаются.
Обратите внимание, что предложения, отображаемые на шаге 5, теперь связаны с контейнером автозаполнения, который больше не связан с моим полем ввода, поэтому любые события, такие как нажатие клавиши esc или нажатие в другом месте на экране, ничего не будут делать. Предложения остаются там до тех пор, пока не произойдет полная перезагрузка страницы.
Я решил исправить это, сохранив mainContainerId самого последнего созданного элемента автозаполнения и удалив его вручную.
// during rendering
self.currentAutoComplete = $("#input-element").autocomplete({
// set options
});
// later
if (this.currentAutoComplete) {
$("#" + this.currentAutoComplete.mainContainerId).remove();
}