我尝试做的是:
1) 获取按键(仅 0-9、a-z 和空格)并将其保存在 div 中
2) 创建了一个 LI 列表(您可以使用带有 a 元素的 div,也可以)
3) 使用正在保存的文本查找 LI 项
4)添加上/右下/左箭头以获取列表中的下一个/上一个项目
现在它保留列表中的所有项目,如果需要,您也可以隐藏它们。这只是一个插图。
//EDIT:
这是一个初学者设置:http://www.pendemo.nl/keyinputtest.html
在 Firefox 中,不会自动选择正文,这导致您需要在检测到第二个输入之前再次单击正文/网页。在 Chrome 中,它会检测到一个接一个地按下的键。
//EDIT2:
在 Firefox 中工作。文本现在保存在 div 中(您可以键入所需的字符串并看到它被放置在正文中)。
//EDIT3:
添加了包含一些项目的 UL 列表。键入一些文本将使用与键入的字符串匹配的项目过滤此列表。
//EDIT4:
仅使用 a-z 和空格进行搜索。仍在寻找如何找到退格键的方法。由于 Chrome 默认添加了“history.go-1”。然而,Firefox 确实注意到了退格键。 event.preventDefault() 不会改变 Chrome 中的任何内容。
//EDIT5:
添加了向上+向右箭头来选择下一个和向左+向下数组来选择上一个项目。
//EDIT6:
使用回车键时,当前值为警报。当然,脚本在警报后停止。但正如您所见,您可以使用该值。
这是我目前想出的代码:
var typed_string = '';
$(document).ready(function() { $('#typedtext').select(); });
$(document).bind('keypress', function(event) {
event.preventDefault();
if((event.which > 47 && event.which < 58) || (event.which > 96 && event.which < 123) || event.which == 32) {
typed_string = typed_string + String.fromCharCode(event.which);
$('#typedtext').html(typed_string);
$('#testlist li').css('background-color', '#ffffff');
$('#testlist li:contains('+typed_string+')').css('background-color', 'green').first().addClass('selected').css('background-color', 'red');
$('#typedtext').select();
}
if(event.which == 13) {
alert('Selected item: ' + $('.selected').html());
$('#typedtext').select();
}
});
$(document).keyup(function(event) {
event.preventDefault();
if(event.which == 38 || event.which == 37) {
$('#testlist li').css('background-color', '#ffffff');
$('#testlist li:contains('+typed_string+')').css('background-color', 'green');
$('.selected').removeClass('selected').prev().css('background-color', 'red').addClass('selected');
}
if(event.which == 39 || event.which == 40) {
$('#testlist li').css('background-color', '#ffffff');
$('#testlist li:contains('+typed_string+')').css('background-color', 'green');
$('.selected').removeClass('selected').next().css('background-color', 'red').addClass('selected');
}
});
function clearInput() {
typed_string = '';
}
我正在使用这个 HTML:
Press any key to save text.<br /><br />
<div id="typedtext" style="border: 1px solid #09F; padding: 5px;"></div>
<br /><br />
Let's test to filter some items from the li. (use up/down or left/right keys to select next item)
<ul id="testlist">
<li>item</li>
<li>test</li>
<li>more test</li>
<li>another item</li>
<li>test item</li>
<li>more item</li>
<li>foo</li>
<li>foo bar</li>
<li>bar</li>
<li>more foo</li>
</ul>
我认为您可以很容易地更改 HTML 代码以满足您的需要。