Я хотел бы сравнить ввод с элементами li, но по какой-то причине он проверяет только последний элемент li. Вы можете увидеть это при запуске скрипта ниже все с «тестом» работает нормально, но не для «примера» или «пример 2»Сравнение строки с каждым элементом li
$(document).ready(function() {
var $input = $('#autocomplete');
$(document).on('keyup', $input, function() {
var $val = $input.val().trim(),
$select = $('.autocomplete-content');
// Check if the input isn't empty
if ($val != '') {
$select.children('li').each(function() {
var $li = $(this),
$html = $li.html(),
$text = $li.text().trim();
// Set input value
$li.click(function() {
$input.val($text);
});
// Check if the value has at least 1 match else hide
if ($text.indexOf($val) !== -1) {
// Remove class hide when input changes and finds a match
if ($li.hasClass('hide')) {
$li.removeClass('hide');
}
// Unhide "ul.autocomplete-content"
if ($select.hasClass('hide')) {
$select.removeClass('hide'); // Show options
}
} else {
$li.addClass('hide');
$select.addClass('hide'); // Hide options
}
});
} else {
$select.addClass('hide');
}
});
});
.hide {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="autocomplete" class="autocomplete">
<ul class="autocomplete-content hide">
<li><img src="test.jpg"> example</li>
<li><img src="test.jpg"> example 2</li>
<li><img src="test.jpg"> test</li>
</ul>
Так что мой вопрос, как я могу сравнить вход против каждого элемента li. Заранее спасибо.
Update
Что-то я забыл упомянуть, что в li
элемент может быть img
вот причина, почему я использовал $li.text()
Рассматривали вы [datalists] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist)? – Hatchet
@ Хатчет не знал, что существует, но это не совсем то, что я ищу в связи со стилем и т. Д. – SuperDJ
Вы добавляете новый обработчик 'click' на каждом событии' keyup' – Andreas