【发布时间】:2016-01-16 18:20:12
【问题描述】:
我想将输入与 li 元素进行比较,但由于某种原因,它只检查最后一个 li 元素。你可以在下面运行脚本时看到这一点,所有带有“test”的东西都可以正常工作,但对于“example”或“example 2”则不行
$(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 元素进行比较。提前致谢。
更新
我忘了提到的是,li 元素中可能是img,这就是我使用$li.text() 的原因
【问题讨论】:
-
你考虑过datalists吗?
-
@Hatchet 不知道它的存在,但它并不是我正在寻找的与样式等相关的东西。
-
您正在为每个
keyup事件添加一个新的click处理程序 -
@Andreas 这与比较字符串有什么关系,因为它只是设置输入的值?
-
这与您的问题无关,但它是您的脚本中的错误。
$li.click(function() { $input.val($text) })添加了一个新的点击处理程序。在第一个keyup之后有一个填充输入的点击处理程序,在第二个keyup之后有两个填充输入的点击处理程序,在第三个keyup之后有三个 ...
标签: javascript jquery