搜索框上下键盘选择联想结果?

写一个搜索框键盘选择联想结果,但是下键是从第二个开始的,但是我不从第二个开始又不行,因为我“keycode == resultLength-1”的时候就让keycode=0了,所以=0的时候我只能让它先++,这种情况就是只有第一次按下它才从第二个结果开始,其他都正常。。。我不知道咋写了,求支出小弟的逻辑错误,昨天弄了一天没整明白。
html代码:

<form action="" name="" class="clearfix">
        <div class="search-btn">
                <i class="fa fa-search"></i>
        </div>
        <ul class="associate">
        </ul>
    </form>

JS代码

<script>
    //取消文本框enter默认提交事件
    $(".search-content").keydown(function(event){
        switch(event.keyCode){
            case 13 : return false;
        }
    })
    //搜索框部分
var arr = ["上城区","华龙家园","望江街道","华龙家园","滨江区","华龙家园","江干区","华龙家园","下城区","1846375XXXX","17600483XXX","18463758XXX","hangzhouhangzhou","05716482558"];
var str = "";
var searchNum;
var keycode = 0;
$(".search-content").keyup(function(event){
    //var resultLength = $(".associate li").length;
    str = "";
    searchNum = 0;
    var search_content = $(this).val();
    var reg = new RegExp("^"+search_content,"i");
    if(search_content.trim().length !== 0){
        $(".associate").css("display","block");
        for(var i in arr){
            if(arr[i].match(reg) && searchNum < 11){
                if(/^1(3|4|5|7|8)\d{1,9}$/.test(search_content)){
                    str += "<li id='1'><i class='fh fh-icon-phone'></i>"+arr[i]+"</li>"+"<li id='2'><i class='fh fh-computer-list'></i>"+arr[i]+"</li>";
                    searchNum++;
                }else{
                    str += "<li>"+arr[i]+"</li>"
                    searchNum++;
                }
            }
        }
        $(".associate").html(str);
    }else{
        str = "";
        $(".associate").css("display","none");
    }
    //键盘辅助搜索结果的选择
    var resultLength = $(".associate li").length;
    if(event.keyCode == 38 && keycode < resultLength+1){
        //键盘上键
        if(keycode == resultLength){
            keycode--;
            class1()
        }else if(keycode == 0){
            keycode = resultLength-1;
            class1()
        }else{
            keycode--;
            class1()
        }
        //键盘下键
    }else if(event.keyCode == 40 && keycode > -1){
        if(keycode == resultLength-1){
            keycode = 0;
            class1()
        }else if(keycode == 0){
            keycode++;
            class1()
        }else{
            keycode++;
            class1()
        }
        //enter键
    }else if(event.keyCode == 13){
        $(".search-content").val($(".associate").find("li:eq("+keycode+")").text());
        $(".associate").css("display","none")
    }
    //封装一个方法
    function class1(){
        var oLi = $(".associate").find("li:eq("+keycode+")")
        oLi.css("background","rgb(226, 223, 223)").siblings().css("background","");
        //oLi.addClass("modern")
    }
   //点击搜索结果改变搜索框的value
    $(".associate li").each(function(){
        $(this).click(function(){
            $(".search-content").val($(this).text());
            localStorage.setItem("numId",$(this).attr("id"))
        })
        $(this).hover(function(){
            $(this).css("background","rgb(226, 223, 223)")
        },function(){
            $(this).css("background","")
        })
    })
})

部分代码已经贴出,主要问题在键盘下键部分,求帮我拍一下,实在是晕了。。。

阅读 3.3k
1 个回答

之前写过一个用百度智能提示练习jsonp的,里面有上下键选择功能,仅供参考。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title></title>
    <style>
        * { padding: 0; margin: 0; }
        html, body { height: 100%; width: 100%; text-align: center;background:url(images/bg.jpg) center center no-repeat;background-size:cover; }
        input { width: 800px; height: 40px; border: 1px solid #ccc; outline: none; padding: 5px 10px; margin-top: 300px; font-size: 16px; font-family: 'Microsoft YaHei'; background: rgba(255,255,255,0.8); }
        ul { width: 820px; margin: 0 auto; list-style: none; margin-top: -1px;background:rgba(255,255,255,0.8); }
            ul.border { border: 1px solid #ccc; }
        li { line-height: 40px; text-align: left; padding: 0 10px; cursor: pointer; }
            li.active { background: #0094ff; color: #fff; }
    </style>
    <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
    <script>
        function getData(data) {
            var list = data.s;
            var html = '';
            $.each(list, function (index, item) {
                html += "<li>" + item + "</li>";
            });
            $("ul").addClass("border").html(html);
        }

        function search(kw) {
            window.location.href = "https://www.baidu.com/s?wd=" + encodeURIComponent(kw);
        }

        $(function () {
            $("input").focus().keyup(function (e) {
                var kw = $(this).val();
                if (!kw) {
                    $("ul").removeClass("border").html("");
                    return;
                }

                if (e.keyCode == 13) {
                    var kw = $(this).val();
                    if (!kw) {
                        return;
                    }
                    search(kw);
                }
                else if (e.keyCode == 38) {
                    var active = $("li.active");
                    if (active.length) {
                        var prev = active.prev();
                        if (prev.length) {
                            prev.addClass("active").siblings().removeClass("active");
                        }
                        else {
                            $("li:last").addClass("active").siblings().removeClass("active");
                        }
                    }
                    else {
                        $("li:last").addClass("active");
                    }
                    $("input").val($("li.active").text());
                }
                else if (e.keyCode == 40) {
                    var active = $("li.active");
                    if (active.length) {
                        var next = active.next();
                        if (next.length) {
                            next.addClass("active").siblings().removeClass("active");
                        }
                        else {
                            $("li:first").addClass("active").siblings().removeClass("active");
                        }
                    }
                    else {
                        $("li:first").addClass("active");
                    }
                    $("input").val($("li.active").text());
                }
                else {
                    $.ajax({
                        type: "get",
                        url: "http://suggestion.baidu.com/su",
                        data: { 'wd': kw, 'p': '3', 'cb': 'getData', 't': new Date().getMilliseconds().toString() },
                        dataType: "jsonp",
                        success: function (data) { },
                        error: function () { }
                    });
                }
            });

            $("ul").on("click", "li", function () {
                search($(this).text());
            });
        });
    </script>
</head>
<body>
    <input type="text" placeholder="百度一下" />
    <ul></ul>
</body>
</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题