Похожие записи:
- Экспорт / импорт структуры виртуальной папки Rubberduck VBA со ссылками на библиотеки в / из папки проекта на жестком диске
- C ++ 20: я — матрица, вещание, np.dot () и np.matmul ()
- Улучшение игры Манкала
- Создание проводника файлов с помощью Python tkinter
- Класс, показывающий формат, аналогичный var_dump v1.0.5
Dram
При добавлении к полям формы автозаполнения возникает ошибка
Вот сам код автозаполнения
Версия квери 1.8.1 + jQuery UI — v1.11.4
Пробовал гуглить и использовать замену autocomplete на ui-autocomplete, а item.autocomplete на ui-autocomplete-item — не помогает.
Что еще можно попробовать?
Aisamiery
Там же написано, что невозможно установить свойство _renderItem у undefined
Ваша конструкция
Возвращает undefined
Я так понимаю весь вопрос к плагину для jQuery
Dram
Попробовал версию плагина jQuery UI — v1.12.1
и вариант по совету отсюда https://jqueryui.com/upgrade-guide/1.10/#autocomplete
return $(«<li></li>»).data(«ui-autocomplete-item», t).append(t.value).appendTo(e);
}
}
ошибка не пропала (
Aisamiery
Попробовал версию плагина jQuery UI — v1.12.1
и вариант по совету отсюда https://jqueryui.com/upgrade-guide/1.10/#autocomplete
ошибка не пропала (
А почему она должна пропасть то? Что такое .data(‘autocomplete’) и почему у неё должно быть какое то свойство _renderItem?
На сколько я помню, функция jQuery data(‘name’) возвращает значение атрибута data-* у элемента, от куда там долженг быть объект то на выходе? Так как $(k).autocomplete({…}) врядли возвращает элемент, а тем более элемент с data-ui-autocomplete то у вас и получается на выходе undefined к которому вы обращаетесь как к объекту в попытке установить свойство _renderItem…. Учите мат часть сначала, будет сильно легче.
Вы от куда код скопировали? Дайте первоисточник
PS Даже в доке по другому, найдите 10 отличий называется
Dram
Aisamiery, скрипт автозаполнения скопировал с другого компонента своего сайта, там все работает проблем нет.
К сожалению JS не знаю, понять его не могу. Обновил в нем только название функции и компонента + добавил 10 штук autocomplete(«#search…
В данный момент на конструкции
return $(«<li></li>»).data(«ui-autocomplete-item», t).append(t.value).appendTo(e);
}
}
Автозаполнение работает, но выдает результат первые 10 из базы. Т.е. чтобы я не вводил — получаю первые 10 результатов.
Думаю, что виновата ошибка озвученная в начале, пытаюсь методом научного тыка ее пофиксить.
Запрос для функции searchFirm писал я, вот он
Aisamiery
Dram, проверьте что в $fullname у вас на php, помимо sql инъекции там может быть просто пусто и по этому у вас будет всегда один результат, так как LIKE ‘%%’ это по сути всё что угодно
SocFishing
Как заявляет первая линка на stackoverflow, то с версии jQuery UI 1.10.0 были внесены правки в автозаполнение. Попробуйте использовать
}).data(«ui-autocomplete»)._renderItem = function(e, t) {
и
.data(«ui-autocomplete-item», t)
за место ваших аналогичных строк или подключите библиотеку jQuery UI 1.10.0 ниже этой версии.
Тут есть ряд фиксов: https://stackoverflow.com/questions/9513251/cannot-set-property-renderitem-of-undefined-jquery-ui-autocomplete-with-html
По лимиту же у вас запрос SELECT * FROM `__firm` WHERE `univ` LIKE ‘%{$fullname}%’ GROUP by univ limit 10
В котором limit 10 означает как раз таки выводить пепрвые 10 записей
Dram
Aisamiery, спасибо, вы были правы, не до конца отредактировал скрипт
нужно было так
Теперь заработало, ошибка не пропала, но все работает.
Но осталось последняя нерешенная проблема. У меня полей на странице может быть от 1 до 10 (это личный кабинет юзера и он может сам их добавлять).
Поэтому я добавил
autocomplete(«#search2»);
autocomplete(«#search3»);
autocomplete(«#search4»);
autocomplete(«#search5»);
autocomplete(«#search6»);
autocomplete(«#search7»);
autocomplete(«#search8»);
autocomplete(«#search9»);
autocomplete(«#search10»);
Начинаю тестировать — загружается ЛК с двумя полями — #search1 и #search2 (в них автозаполнение работает).
Нажимаю кнопку добавить поле — появляется еще поле с #search3 и вот в нем и далее автозаполнение уже не работает.
Ошибка на странице все та же из первого сообщения.
———- Добавлено 28.04.2020 в 17:36 ———-
SocFishing, SQL и PHP я немного знаю, это вот с JS совсем слабо. Т.е. я знаю что такое лимит и это я сам писал запрос. На счет SQL инъекций тоже продумал.
tommy-gung
вызывай autocomplete(«поле»); после создания этого поля
Dram
tommy-gung, спасибо! получилось!
divv
Упрощенный вариант, список li формируется в php обработчике