我正在制作一个选择控件,它在“li”中显示选项列表,并允许用户在 li 中上下滚动。由于 li 有时可以被过滤,它们将通过“.hide”呈现为不可见,给我以下标记:
<input type="text" id="comboBox" />
<ul id="comboBoxData">
<li style="display:none">1</li>
<li>12</li>
<li>123</li>
<li>1234</li>
<li style="display:none">12345</li>
<li style="display:none">123456</li>
<li>1234567</li>
<li>12345678</li>
</ul>
我有以下 JQuery 代码来处理箭头键控件:
$('#comboBox').bind('keypress', function(e) {
if (e.keyCode >= 38 && e.keyCode <= 41) {
if ($("#comboBoxData li.selected").length > 0) {
var current = $("#comboBoxData li.selected");
if (e.keyCode == 38) {
$("#comboBoxData li.selected").prev('li:visible').addClass('selected');
} else if (e.keyCode == 40) {
$("#comboBoxData li.selected").next('li:visible').addClass('selected');
}
current.removeClass('selected');
} else {
$("#comboBoxData li:visible:first").addClass('selected');
}
$("#comboBox").val($("#comboBoxData li.selected").html());
}
});
使用以下 CSS 清楚地标记我选择了哪个元素:
.selected
{
background-color:Navy;
color:White;
}
我的问题是这样的,在我给出的示例中,当用户按下“向下”按钮时,正在选择“12”的 LI,并且向上和向下按钮对于“12”到“1234”正常工作,但是在那里他们停下来找不到“1234567”,因为设置为“显示:无”的两个 li 之间存在间隙。有没有解决的办法?也许可以替代 .next() 和 .previous()?