Я использую плагин Autocomplete Jorn Zaefferer на нескольких разных страницах. В обоих случаях порядок отображаемых строк немного испорчен.jQuery Плагин «Autocomplete» испортил порядок моих данных
Пример 1: Массив строк: в основном они расположены в алфавитном порядке для всеобщего сведения, которые были задвинуты на верх, за исключением:
Общие знания, искусства и дизайна, бизнес-исследований, гражданственности, дизайна и технологии, английский , география, история, информационные технологии, математика, MFL французский, MFL немецкий, MFL испанский, музыка, физкультура, PSHE, религиозное образование, наука, Something Else
Отображаемых строки:
Общих знания, география, искусство и Дизайн, исследования бизнеса, гражданство, дизайн и технология, английский, история, ИКТ, математика, M FL Французский, MFL Немецкий, MFL Испанский, Музыка, Физическое воспитание, PSHE, Религиозное образование, Наука, Что-то еще
Обратите внимание, что география была переведена на второй предмет после General Knowledge. Остальное все в порядке.
Пример 2: массив строк: как указано выше, но с перекрестным курсом вместо общего знания.
Обучение, исследования, гражданство, дизайн и технологии, английский, география, история, ИКТ, математика, MFL Французский, MFL Немецкий, MFL Испанский, Музыка, Физическое воспитание, PSHE, Религиозное образование, Наука, Something Else
Отображаемых строки:
междисциплинарный, гражданство, искусство и дизайн, бизнес-исследования, дизайн и технология, английская, география, история, информационные технологии, математика, MFL французский, MFL немецкий, MFL испанских , Музыка, Физическое воспитание, PSHE, Религиозное образование, Наука, Что-то еще
Здесь гражданство было pu пролить в позицию номер 2.
Я немного экспериментировал, и кажется, что есть ошибка, говорящая «положить вещи, которые начинаются с того же письма, что и первый элемент после первого элемента, и оставить остальных в покое». Вид мистификации. Я пробовал немного отладки, вызывая предупреждения внутри кода плагина автозаполнения, но везде, где я вижу, он использует правильный порядок. это похоже на то, когда он вынес, что он идет не так.
Любые идеи кто-нибудь? макс
EDIT - ответ Клинт
Спасибо за указание мне в соответствующий бит кода кстати. Чтобы упростить диагностику, я изменил массив значений на [«морковь», «яблоко», «вишня»], которую автозаполняет, повторно заказывает [«морковь», «вишня», «яблоко»].
Вот массив, который он генерирует для stMatchSets:
stMatchSets = ({ '': [# 1 = {значение: "морковь", данные: [ "морковь"], результат: "морковь"}, # 3 = {значение: "яблоко", данные: ["apple"], результат: "apple"}, # 2 = {значение: "cherry", data: ["cherry"], result: "cherry"}] , c: [# 1 #, # 2 #], a: [# 3 #]})
Итак, он собирает первые буквы вместе в карту, что имеет смысл в качестве стратегии совпадения первого шага. Тем не менее, мне бы хотелось, чтобы он использовал данный массив значений, а не карту, когда дело доходит до заполнения отображаемого списка.Я не могу понять, что происходит с кешем внутри кишки кода (я не очень разбираюсь в javascript).
SOLVED - я исправил это, взломав javascript в плагине.
В строке 549 (или 565) мы возвращаем переменную csub, которая является объектом, содержащим соответствующие данные. Прежде чем он будет возвращен, я переупорядочу его так, чтобы порядок соответствовал исходному массиву значений, которые мы дали, т. Е. Мы использовали для создания индекса в первую очередь, который я поместил в другую переменную:
csub = csub. sort (function (a, b) {return originalData.indexOf (a.value)> originalData.indexOf (b.value);})
hacky, но он работает. Лично я считаю, что это поведение (возможно, более чистое кодирование) должно быть поведением плагина по умолчанию: т. Е. Порядок результатов должен соответствовать исходному переданному массиву возможных значений. Таким образом, пользователь может сортировать свой массив по алфавиту, если они хотят (что тривиально), чтобы получить результаты в алфавитном порядке, или они могут сохранить свой собственный «заказ».
Спасибо snz3, что отлично работает. ура, не более –