Я пытаюсь настроить плагин WordPress https://github.com/algolia/algoliasearch-wordpress в соответствии с нашими потребностями.То, что мы хотим сделать, это иметь результат поиска, который загрузит данные на той же странице.
Мои сообщения WordPress и данные успешно проиндексированы.Я добавил окно поиска на страницу, и автозаполнение запускается.
Из коробки шаблон плагина WordPress оборачивает результат в тег привязки и назначает ему URL-адрес найденного результата.При нажатии это приведет вас к этому сообщению.Однако я хочу перехватить этот щелчок и загрузить результат на той же странице, не переходя прочь.
Я удалил href из якоря.Я также отредактировал прилагаемый шаблон autocomplete.php
, где происходит вызов autocomplete:selected
.Там я убрал вызов, чтобы уйти, удалив window.location.href
.
Теперь у меня есть две основные проблемы.
1 - Когда пользователь нажимает на результат поиска, я хотел бы, чтобы ввод был заполнен заголовком элемента, по которому он щелкнул.Я добавил это в обратный вызов autocomplete:selected
, добавив $searchInput[0].value = suggestion.post_title
.Который, кажется, правильно меняет значение ввода, но как только я щелкаю прочь от ввода, он возвращается к исходному введенному значению.Поэтому, если я наберу «may» и нажму на результат «mayonnaise», к данным результата можно будет получить доступ, но ввод вернется к «may».Моя функция выглядит так:
/* Instantiate autocomplete.js */
var autocomplete = algoliaAutocomplete($searchInput[0], config, sources)
.on('autocomplete:selected', function (e, suggestion) {
console.log(suggestion);
autocomplete.autocomplete.close();
});
2 - Кажется, что выпадающий список автозаполнения не скрывается, когда пользователь щелкает.Чтобы решить эту проблему, мне пришлось использовать то, что я думаю, немного неприятно с jQuery.Мне было интересно, если это действительно требуется?Мой код чуть ниже autocomplete:selected
выглядит так:
jQuery('body').on("click", function(event){
if (!jQuery(event.target).closest($searchInput[0]).length) {
autocomplete.autocomplete.close();
}
});