Jquery箭头键导航

时间:2011-04-04 11:49:24

标签: jquery navigation key

我有类似自动提示的Facebook的这些文本字段和下拉菜单:

<input type="text" id="search" name="search_fld"/>

<div id="display">
<div class="display_box">Luca</div>
<div class="display_box">David</div>
<div class="display_box">Mark</div>
<div class="display_box">...</div>
</div>

我的CSS:

.display_box:hover
{
  background:#3b5998;
  color:#FFFFFF;
}

如何通过向下箭头键将“hover”状态从我的输入“search_fld”传递到第一个“display_box”,依此类推所有“display”div?

这是link the jsfiddle code

4 个答案:

答案 0 :(得分:9)

你无法完美地模仿悬停状态..添加具有相同风格的“真实”类是无法逃脱的:

.display_box_hover, .display_box:hover
{
  background:#3b5998;
  color:#FFFFFF;
}

现在这段代码将“导航”元素:

window.displayBoxIndex = -1;

$("#search").keyup(function(e) 
{
        if (e.keyCode == 40) 
        {  
            Navigate(1);
        }
        if(e.keyCode==38)
        {
            Navigate(-1);
        }

});

var Navigate = function(diff) {
    displayBoxIndex += diff;
    var oBoxCollection = $(".display_box");
    if (displayBoxIndex >= oBoxCollection.length)
         displayBoxIndex = 0;
    if (displayBoxIndex < 0)
         displayBoxIndex = oBoxCollection.length - 1;
    var cssClass = "display_box_hover";
    oBoxCollection.removeClass(cssClass).eq(displayBoxIndex).addClass(cssClass);
}

这将“记住”最后一个“selected”元素的索引并切换到next或previous元素,使用eq()函数并将上面的类添加到所选元素。

Updated jsFiddle

答案 1 :(得分:4)

当然很难看。在小提琴上here

<script src="jquery.js"></script>

<script>
$(function (){

        $('.display_box').hover(function (){            
            $(this).attr('class', 'display_box current')
        }, function (){
            $(this).attr('class', 'display_box');
        });

        $('#search').keyup(
            function (e){
                var curr = $('#display').find('.current');
                if (e.keyCode == 40) 
                {                                   
                    if(curr.length)
                    {
                            $(curr).attr('class', 'display_box');
                            $(curr).next().attr('class', 'display_box current');
                    }
                    else{
                        $('#display div:first-child').attr('class', 'display_box current');
                    }                   
                }
                if(e.keyCode==38)
                {                                       
                    if(curr.length)
                    {                           
                            $(curr).attr('class', 'display_box');
                            $(curr).prev().attr('class', 'display_box current');
                    }
                    else{
                        $('#display div:last-child').attr('class', 'display_box current');
                    }           
                }
            }       
        )

    });
</script>
<style>
.current{
  background:#3b5998;
  color:#FFFFFF;
}
</style>

<input type="text" id="search" name="search_fld"/>
<div id="display">
<div class="display_box current">Luca</div>
<div class="display_box">David</div>
<div class="display_box">Mark</div>
<div class="display_box">...</div>
</div>

答案 2 :(得分:1)

为了实现自我提交文本字段,最好使用“datalist”标记,如下所示:

<input list="search" name="search_fld"/>
  <datalist id="search">
     <option value="Luca"/>
     <option value="David"/>
     <option value="Mark"/>
  </datalist>

从此处获取有关datalist标记的更多详细信息:http://www.w3schools.com/tags/tag_datalist.asp

答案 3 :(得分:0)

您可以使用箭头键作为输入字段背景,使用css /使用背景箭头图像在输入字段上使用覆盖范围,并使用css或js使其在悬停状态下可见