1. 程式人生 > >自動補全、自動提示的兩種實現方式(前端實現與後端實現)

自動補全、自動提示的兩種實現方式(前端實現與後端實現)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="aboveTool.css">
    <script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
</head>

<body>
    <div class="nav">
        <input type="text" id="txtAddress">
        <button class="search"></button>
    </div>
    <div>
        <div class="autoComplete">
            <ul></ul>
        </div>
    </div>
    <script>
    var autoBox = $(".autoComplete"),
        autoUl = $(".autoComplete ul"),
        textFill = $("#txtAddress");
        $("#txtAddress").on("keyup",function(e){
            //38:向上箭頭;40:向下箭頭;13:Enter鍵
            if(e.keyCode!=38&&e.keyCode!=40&&e.keyCode!=13){
                textSearch = $(this).val();
                setTimeout(function(){
                    autoMapPg.getData(textSearch);
                },100)
            }
        });

        $(".autoComplete ul").on("click",".suggestItem",function(e){
            var ft = $(this).attr("data-item");
            textFill.val(ft);
            autoMapPg.getData(ft).then(function (data) {
                //autoMapPg.abovePoint(data,ft)
            })
        });

        $(".search").on("click", function(e){
            var result = "",
                addressDistrict = "";
            if(!textFill.val()) return;
            autoMapPg.detailData(textFill.val()).then(function(data){
                //autoMapPg.abovePoint(data);
            })
        });

        var autoMapPg={
            //獲取實時提示資料
            getData : function(textSearch){
                var dfd = $.Deferred(),
                    searchHtml = "",
                    addressDistrict = "";
                if(textSearch){
                    var ft = textSearch.toString().toLowerCase();
                    $.ajax({
                        type:"post",
                        data:ft,
                        url:"後端服務地址1",
                        success:function(result){
                            var result = JSON.parse(result);
                            console.log(result)
                            if(result.length){
                                for(var i=0,len=result.length;i<len;i++){                              
                                    searchHtml += '<li class="suggestItem" data-item="'+result[i].Name+'"><i class="default">'+result[i].Name+'</i></li>';
                                }
                            }
                            autoBox.show().siblings().hide();
                            autoUl.html(searchHtml);
                            listLength = autoUl.children().length;
                            dfd.resolve(result)
                        }
                    })
                    return dfd.promise();
                }else{
                    autoUl.html("");
                    $(".dataUpload").show();
                }

            },
            detailData : function(text){
                var dfd = $.Deferred();
                $.ajax({
                    type:"post",
                    url:"後端服務地址2",
                    data:"text="+text,
                    success:function(result){
                        var result = JSON.parse(result);
                        if(result.status == 0){
                            result = result.obj.results;
                            dfd.resolve(result)
                        }else{
                            console.log(result)
                        }
                    }
                })
                return dfd.promise()
            }
        };
    </script>
</body>

</html>
②aboveTool.css: