Вернуть все удаленные совпадения с опережающим вводом без дополнительной фильтрации

Не могу найти способ отключить фильтрацию с помощью typeahead. По сути, мне просто нужна функция автозаполнения (или, скорее, выпадающая подсказка для поиска). Я выполняю поиск по почтовому индексу, и полученные почтовые индексы не обязательно совпадают с запрошенными. Как сделать так, чтобы отображались все совпадения без повторной дополнительной фильтрации?

Ниже приведен код, который у меня есть:

var dealers = new Bloodhound({
    datumTokenizer: function (d) {
        return Bloodhound.tokenizers.whitespace(d);
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
        url: '/form/find-dealer?postalCode=',
        prepare: function (query, settings) {
            settings.url += encodeURIComponent(query);
            settings.type = 'POST';
            settings.contentType = "application/json; charset=UTF-8";
            return settings;
       }
    }
});

$('input[name=postalCode]').typeahead({
    minLength: 3
}, {
    name: 'dealers',
    display: function (data) {
        return data.title;
    },
    source: dealers.ttAdapter()
});

Примечание. Я знаю, что поиск по почтовому индексу таким образом кажется немного неудобным, но цель дизайнера заключалась в том, чтобы пользователи могли осуществлять взаимозаменяемый поиск по имени дилера и почтовому индексу.

Дополнительная информация: typeahead.bundle.js — v0.11.1


person i--    schedule 03.06.2016    source источник
comment
полученные почтовые индексы не обязательно совпадают с запрошенными. Похоже, вы хотите показать все почтовые индексы независимо от того, что вводит пользователь .... Как мне заставить его показывать все совпадения, похоже, вы хотите, чтобы они соответствовали типам пользователей. Пожалуйста, уточните, что вы хотите. Демонстрация может быть полезна. Кроме того, какую версию плагина вы используете?   -  person yezzz    schedule 03.06.2016
comment
@yezzz, typeahead.bundle.js — v0.11.1. Я хотел бы показать все объекты, восстановленные с помощью вызова AJAX (все остальное волшебство уже происходит на стороне сервера)   -  person i--    schedule 03.06.2016


Ответы (3)


Кажется, показать все без какого-либо (совпадающего) запроса невозможно: https://github.com/twitter/typeahead.js/issues/1308

Хотя некоторые пытаются это сделать с minlength=0 вот так: https://github.com/twitter/typeahead.js/issues/1251

И, похоже, это было возможно в более старой версии: https://github.com/twitter/typeahead.js/pull/719

Кстати, плагин больше не разрабатывается, а руководство неполное. Улучшенный вариант можно найти в этом форке: https://github.com/corejavascript/typeahead.js/tree/master/doc

Сказав это, вам может быть лучше с другим автоматическим предложением или плагином, таким как select2, который показывает результаты по умолчанию и может использовать внешние источники.

person yezzz    schedule 03.06.2016
comment
Спасибо за исследование и ответ, но я все еще считаю, что это выполнимо, если предоставить пользовательскую функцию в виде source для наборов данных (jQuery#typeahead(options, [*datasets])). - person i--; 04.06.2016
comment
Пожалуйста. Дай мне знать, когда у тебя получится. Удачи. - person yezzz; 04.06.2016

Если вы хотите отправить запрос в AJAX и получить данные из своей базы данных и добавить все результаты JSON для результата typehead (у вас есть фильтр данных с базой данных и отправить чистые данные с помощью AJAX и JSON, но заголовок типа имеет дополнительную фильтрацию и не показать что-либо или некоторые из ваших данных), вы должны сделать это:

Откройте bootstrap-typeahead.js и найдите

item.toLowerCase().indexOf(this.query.toLowerCase())

И замените его на:

item.toLowerCase().indexOf(item.toLowerCase())

Вы можете показать все результаты из Ajax JSON ...

person Amin.MasterkinG    schedule 09.02.2017
comment
Я не могу найти: item.toLowerCase().indexOf(this.query.toLowerCase()) в файле js. где именно? - person Ketan Lathiya; 15.06.2019

Некрасиво, так как библиотека была разветвлена ​​и больше официально не поддерживается создателем, но это исправление помогло мне https://github.com/twitter/typeahead.js/pull/1212. По сути, в удаленном режиме он возвращает все совпадения, что, на мой взгляд, является правильным поведением.

Этот поток SO помог не все результаты ajax typeahead в Twitter показаны

person i--    schedule 06.06.2016