我有一个自动完成搜索,通过输入几个字符,它将显示所有与输入的字符匹配的名称。我正在使用 DIV 标记在 jsp 中填充这些数据,通过使用鼠标我可以选择名称。但我想使用键盘上下箭头选择要选择的 DIV 标记中的名称。谁能帮我解决这个问题。
rammohan
问问题
38754 次
4 回答
15
使用onkeydown
andonkeyup
事件检查结果 div 中的按键事件:
var UP = 38;
var DOWN = 40;
var ENTER = 13;
var getKey = function(e) {
if(window.event) { return e.keyCode; } // IE
else if(e.which) { return e.which; } // Netscape/Firefox/Opera
};
var keynum = getKey(e);
if(keynum === UP) {
//Move selection up
}
if(keynum === DOWN) {
//Move selection down
}
if(keynum === ENTER) {
//Act on current selection
}
于 2008-12-17T17:56:24.087 回答
3
复制并粘贴这段代码并尝试..
<style>
div.active{
background: lightblue
}
</style>
<center>
<input type="text" id="tb">
<div id="Parent" style="position:absolute;display:block;left:428px; width:146px;top:38px; height:100px; border: 2px solid lightblue; overflow:auto;">
<div id="childOne">1 </div>
<div id="childOne">2 </div>
<div id="childOne">3 </div>
<div id="childOne">4 </div>
<div id="childOne">5 </div>
<div id="childOne">6 </div>
<div id="childOne">7 </div>
<div id="childOne">8 </div>
<div id="childOne">9 </div>
<div id="childOne">10 </div>
</div>
</center>
<script type="text/javascript">
var scrolLength = 19;
function autocomplete( textBoxId, containerDivId ) {
var ac = this;
this.textbox = document.getElementById(textBoxId);
this.div = document.getElementById(containerDivId);
this.list = this.div.getElementsByTagName('div');
this.pointer = null;
this.textbox.onkeydown = function( e ) {
e = e || window.event;
switch( e.keyCode ) {
case 38: //up
ac.selectDiv(-1);
break;
case 40: //down
ac.selectDiv(1);
break; }
}
this.selectDiv = function( inc ) {
if(this.pointer > 1){
scrollDiv();
}
if(this.pointer == 0)
document.getElementById("Parent").scrollTop = 0;
if( this.pointer !== null && this.pointer+inc >= 0 && this.pointer+inc < this.list.length ) {
this.list[this.pointer].className = '';
this.pointer += inc;
this.list[this.pointer].className = 'active';
this.textbox.value = this.list[this.pointer].innerHTML;
}
if( this.pointer === null ) {
this.pointer = 0;
scrolLength = 20;
this.list[this.pointer].className = 'active';
this.textbox.value = this.list[this.pointer].innerHTML;
}
}
function scrollDiv(){
if(window.event.keyCode == 40){
document.getElementById("Parent").scrollTop = scrolLength;
scrolLength = scrolLength + 19;
}
else if(window.event.keyCode == 38){
scrolLength = scrolLength - 19;
document.getElementById("Parent").scrollTop = scrolLength;
}
}
}
new autocomplete( 'tb', 'Parent' );
</script>
于 2009-01-25T14:18:52.120 回答
0
我假设您有一个处理输入的输入。
为您读出 event.keyCode 的输入映射 onkeyup-eventhandler,并在它是向上/向下箭头(38、40)的适当键码时执行操作,以保持对您的哪个节点(您的 div 中的项目)的引用将焦点移到。
然后当你按下回车键(keyCode 13)时调用同一个处理程序,就像你在点击时一样。
很难给出一个编码示例,因为它高度依赖于上下文,但是关于如何浏览 div 的提示是让我们使用 .nextSibling 和 .previousSibling,以及 .firstChild 和 .childNodes。
于 2008-11-11T09:41:51.200 回答
0
我已经很久没有这样做了,但我想你可以使用event.keyCode
.
如果返回的值为 38 和 40,则用户分别按下了向上和向下箭头。
然后,您必须选择当前位置上方或下方的行。如何选择行将取决于您的具体情况。
于 2008-11-11T09:46:04.780 回答