Повторная инициализация плагина подсказок с UpdatePanel ASP.NET
Работаем с DaData из ASP.NET, написали клиентский контрол для ввода адреса с использованием DaData. Есть проблема при использовании контрола на UpdatePanel - необходимо вручную переинициализировать .suggestions, простое включение скрипта в HTML код не работает.
Пытаемся реализовать присвоение .suggestions руками после обновления, но, почему-то не работает:
$("input[type='text'],textarea").each(function() { this.suggestions = $("body").suggestions; this.suggestions(<параметры инициализации>)});
Тестовый стенд:
Ответ
Я рекомендую вынести код инициализации подсказок в функцию, и просто вызывать её:
function initSuggestions(selector) { $(selector).suggestions({ ... }); } ... initSuggestions("#address-1"); initSuggestions("#address-2"); initSuggestions("#address-3");
Проблема в том, что банальный вызов $(selector).suggestions({ ... }); в сложных ситуациях выдаёт suggestions is undefined. Т.е. даже через селекторы jQuery глобальные расширения почему-то становятся недоступными для HTML разметки, которая приехала через ASP.NET UpdatePanel.
Была похожая проблема, оформление заказа на сайте так организовано, что при переходе на следующий шаг аяксом прогружается страница шага. На каких-то страницах есть код инициализации дадаты. Но можно и перемещаться назад, на предыдущие шаги. И когда повторно переходишь на шаг, на котором уже был, подсказки с полей слетают, потому что контент загружается по новой. Долго возился, вылечилось так. При повторной загрузке страницы я стал сначала очищать контейнер, куда загружал страницу, а потом уже грузить саму страницу. Таким образом все подключенное к старым контролам тоже удаляется. И после этого все отлично инициализируется и работает.
Сервис поддержки клиентов работает на платформе UserEcho
Я рекомендую вынести код инициализации подсказок в функцию, и просто вызывать её: