Показывать результаты только в режиме поиска
Я использую библиотеку ListJs для выполнения нечеткого поиска и работает отлично, но есть только одна проблема, я хочу, чтобы результаты показывались только тогда, когда пользователь выполняет поиск, а не показывали все результаты, как показывает большинство примеров документации.
Я не могу найти ни одного примера для того, что я ищу, возможно, у ListJs есть опция, которая делает результаты доступными только в одном режиме поиска?
HTML:
<div id="sandbox">
<input class="form-control form-control-lg fuzzy-search" placeholder="Search" />
<ul class="list" id="list"></ul>
</div>
JS:
var options = {
valueNames: [
'productTitle',
'productBrand',
{ name: 'productImage', attr: 'src' }
],
item: '<li>
<img src="" class="img-fluid productImage" style="height: 100px;" alt="#" />
<h3 class="productTitle"></h3>
<p class="productBrand"></p>
</li>'
};
var userList = new List('sandbox', options);
$.getJSON( "data.json", function( data ) {
userList.add(data);
});
1 ответ
Итак, я не уверен, что понял, что вы хотели, но я попробую, так как вы еще не получили ни одного ответа.
Что я думаю, что вы хотите: по умолчанию список скрыт. Когда пользователь фокусируется на поле поиска, появляется список. Когда фокус потерян, список снова скрыт.
Вы можете решить эту проблему с помощью некоторых js (вы можете использовать jquery для селекторов и методы hide() show()):
HTML:
<div id="users">
<input class="search" placeholder="Search" />
<button class="sort" data-sort="name">
Sort by name
</button>
<ul class="list">
<li>
<h3 class="name">Jonny Stromberg</h3>
<p class="born">1986</p>
</li>
<li>
<h3 class="name">Jonas Arnklint</h3>
<p class="born">1985</p>
</li>
<li>
<h3 class="name">Martina Elm</h3>
<p class="born">1986</p>
</li>
<li>
<h3 class="name">Gustaf Lindqvist</h3>
<p class="born">1983</p>
</li>
</ul>
</div>
<script src="//cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script>
JS:
// Listjs
var options = {
valueNames: [ 'name', 'born' ]
};
var userList = new List('users', options);
// Show/hide on focus
var searchField = document.getElementsByClassName('search')[0];
var listDiv = document.getElementsByClassName('list')[0];
// Hide the list by default
listDiv.style.visibility = 'hidden';
document.addEventListener('DOMContentLoaded', function() {
searchField.addEventListener('focus', function() {
// Search input focused
listDiv.style.visibility = 'visible';
});
});
document.addEventListener('DOMContentLoaded', function() {
searchField.addEventListener('focusout', function() {
// Search input not focused
listDiv.style.visibility = 'hidden';
});
});
Вот ссылка на кодовый блок, пример, основанный на другом примере сайта listjs.
Надеюсь, это поможет, ура!