Twitter Typeahead Bloodhound: Получить текущую строку поиска внутри опции сортировщика - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь отсортировать предложения в зависимости от положения строки поиска внутри полей данных. Если кто-то печатает «ar», предложение A: «как дела» следует заказывать перед B: «приходи, как есть», потому что строка поиска соответствует 2-му слову в A и 4-му слову в B. Это уже работает очень ну.

Чтобы получить строку поиска, я использую $('.searchfield').val(). Проблема в том, что у меня есть несколько полей поиска внутри страниц, поэтому я должен знать, какое поле поиска в настоящее время используется.

Вот мой код в объявлении Bloodhound:

sorter: function(a, b) {
        var input_string = $('.searchfield').val(); // <-- Here is my problem
        input_string = input_string.split(/[ \-]+/);
        input_string = input_string[0].toLowerCase();
        var aArray = a.name.toLowerCase().split(/[ \-]+/);
        var bArray = b.name.toLowerCase().split(/[ \-]+/);
        var apos = 0, bpos = 0;
        for (var i = 0; i < aArray.length; i++) {
            if (aArray[i].indexOf(input_string) !== -1) {
                apos = i;
                break;
            }
        }
        for (i = 0; i < bArray.length; i++) {
            if (bArray[i].indexOf(input_string) !== -1) {
                bpos = i;
                break;
            }
        }
        if (apos < bpos) {
            return -1;
        } else if (apos > bpos) {
            return 1;
        } else return 0;
    }

Кто-нибудь знает, как получить строку поиска для используемого в настоящее время поля ввода?

Спасибо,

Бернд

PS Извините за мой engli sh

1 Ответ

0 голосов
/ 10 марта 2020

Хорошо, я определил глобальную переменную, и когда поле ввода получает фокус, я сохраняю элемент в переменной.

var currentTypeAheadField = null;

jsTypeahead.on('focus', function() {
    currentTypeAheadField = $(this);
})

Так что в моем объявлении Bloodhound у меня есть доступ к значению:

sorter: function(a, b) {
    var input_string = currentTypeAheadField.val();
    ...
}

Не нашел лучшего решения, но оно работает.

...