亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

仿百度輸入框智能提示的js代碼

2019-11-20 22:22:34
字體:
來源:轉載
供稿:網友

最近客戶需求老是變更,不過有些是因為客戶催得急,我沒有那么快能完成,所以先做了一個雛形給他們,后來再慢慢改。比如雛形那里我做了一個下拉列表給他們,事實上他們的數據有200多條,用個下拉列表的話很不現實,你能找那么多?而且那個下拉列表該有多長啊?所以很自然的,我想到了百度那個智能提示的功能。

參考了一下之前忘記是哪位大俠寫的東西,他的是使用百度api的,為了簡單起見,我把數據都定在了js那里,這樣看官們容易理解一些。

還是整個代碼考上來吧,代碼不長??剂艘幌轮巴浭悄奈淮髠b寫的東西,他的是使用百度api的,為了簡單起見,我把數據都定在了js那里,這樣看官們容易理解一些。

復制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <style type="text/css">
        .search
        {
            left: 0;
            position: relative;
        }
        #auto_div
        {
            display: none;
            width: 300px;
            border: 1px #74c0f9 solid;
            background: #FFF;
            position: absolute;
            top: 24px;
            left: 0;
            color: #323232;
        }
    </style>
    <script src="jquery-1.7.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">

        //測試用的數據
        var test_list = ["小張", "小蘇", "小楊", "老張", "老蘇", "老楊", "老爺爺", "小妹妹", "老奶奶", "大鵬", "大明", "大鵬展翅", "你好", "hello", "hi"];
        var old_value = "";
        var highlightindex = -1;   //高亮

        //自動完成
        function AutoComplete(auto, search, mylist) {
            if ($("#" + search).val() != old_value || old_value == "") {
                var autoNode = $("#" + auto);   //緩存對象(彈出框)
                var carlist = new Array();
                var n = 0;
                old_value = $("#" + search).val();

                for (i in mylist) {
                    if (mylist[i].indexOf(old_value) >= 0) {
                        carlist[n++] = mylist[i];
                    }
                }
                if (carlist.length == 0) {
                    autoNode.hide();
                    return;
                }
                autoNode.empty();  //清空上次的記錄
                for (i in carlist) {
                    var wordNode = carlist[i];   //彈出框里的每一條內容

                    var newDivNode = $("<div>").attr("id", i);    //設置每個節點的id值
                    newDivNode.attr("style", "font:14px/25px arial;height:25px;padding:0 8px;cursor: pointer;");

                    newDivNode.html(wordNode).appendTo(autoNode);  //追加到彈出框

                    //鼠標移入高亮,移開不高亮
                    newDivNode.mouseover(function () {
                        if (highlightindex != -1) {        //原來高亮的節點要取消高亮(是-1就不需要了)
                            autoNode.children("div").eq(highlightindex).css("background-color", "white");
                        }
                        //記錄新的高亮節點索引
                        highlightindex = $(this).attr("id");
                        $(this).css("background-color", "#ebebeb");
                    });
                    newDivNode.mouseout(function () {
                        $(this).css("background-color", "white");
                    });

                    //鼠標點擊文字上屏
                    newDivNode.click(function () {
                        //取出高亮節點的文本內容
                        var comText = autoNode.hide().children("div").eq(highlightindex).text();
                        highlightindex = -1;
                        //文本框中的內容變成高亮節點的內容
                        $("#" + search).val(comText);
                    })
                    if (carlist.length > 0) {    //如果返回值有內容就顯示出來
                        autoNode.show();
                    } else {               //服務器端無內容返回 那么隱藏彈出框
                        autoNode.hide();
                        //彈出框隱藏的同時,高亮節點索引值也變成-1
                        highlightindex = -1;
                    }
                }
            }

            //點擊頁面隱藏自動補全提示框
            document.onclick = function (e) {
                var e = e ? e : window.event;
                var tar = e.srcElement || e.target;
                if (tar.id != search) {
                    if ($("#" + auto).is(":visible")) {
                        $("#" + auto).css("display", "none")
                    }
                }
            }

        }

        $(function () {
            old_value = $("#search_text").val();
            $("#search_text").focus(function () {
                if ($("#search_text").val() == "") {
                    AutoComplete("auto_div", "search_text", test_list);
                }
            });

            $("#search_text").keyup(function () {
                AutoComplete("auto_div", "search_text", test_list);
            });
        });
    </script>
</head>
<body>
    <div class="search">
        <input type="text" id="search_text" />
        <div id="auto_div">
        </div>
    </div>
</body>
</html>


大家復制代碼的時候記得把jquery帶上,不然出錯了又要來罵娘了……

說說主要的思路吧。

首先,把數據弄成一個js數組,然后遍歷這個數組,每一條數據生成一個div,然后添加到auto_div這個div里,還要設置一下鼠標移過高亮,移開恢復正常,以及點擊的時候自動填上文本框里,還有鼠標在網頁點擊的時候列表框會消失――當然還有更多細節要注意,這里只是舉個例子。怎樣讓文本框里的文本改變的時候就觸發AutoComplete事件呢?用onchange?錯,onchange是文本框失去光標的時候才會觸發,所以使用keyup事件會好一點。

別的不多說,代碼也不難看懂,原理也很簡單。我要強調的一點是,像這種智能提示功能可能有些新手會想到用模糊搜索,當文本框里的文本改變的時候就去查一下數據庫,把返回的數據列出來――這是不好的做法,我不說他錯誤因為這樣確實可行,但是這會給服務器造成太大的負擔,每改變一下文本就查一下數據庫,就好像我每要一樣東西就要向你問一下一樣,倒不如你一次把它們全給我,我要什么自己選。當然凡事都有兩面性,把所有數據一次性查出來的后果是耗內存,大數據不建議這樣做,這種做法適用于大部分情況,因為大部分情況都不是大數據――大數據的,另想它法。

最后說說我的感受:之前面試過前端工程師,那時候人家覺得我還嫩,確實那時候特嫩。現在,我在前端的領域正開始慢慢強大起來,雖然公司沒有前端工程師,但是我還是覺得前端很重要,我要合理運用前端來解決一些用前端很簡單就能解決的問題,而不是丟給后臺來處理。

在公司做著做著,雖然跟別人學到的東西不多,但是需求來了,自己想辦法以及在網上找一些解決方案,自己也學到不少東西。繼續做,加油!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久秋霞鲁丝| 日本精品久久久久影院| 91精品国产网站| 日韩有码在线视频| 亚洲一区二区三区四区视频| 欧美激情精品久久久久久变态| 国产va免费精品高清在线观看| 精品一区二区三区四区| 国产精品99一区| 欧洲成人午夜免费大片| 日韩男女性生活视频| 国产精品久久久久久久久| 日韩视频中文字幕| 性欧美暴力猛交69hd| 5278欧美一区二区三区| 在线日韩av观看| 国产精品爽黄69| 欧美情侣性视频| 国产99久久精品一区二区| 国产美女久久久| 久久九九免费视频| 综合久久五月天| 欧美久久精品一级黑人c片| 福利一区福利二区微拍刺激| 日韩电影在线观看永久视频免费网站| 国产精品一区二区性色av| 亚洲成人动漫在线播放| 欧美午夜精品久久久久久浪潮| 亚洲国产精品人人爽夜夜爽| 久久99久国产精品黄毛片入口| 国产精品日韩欧美大师| 国产日产久久高清欧美一区| 欧美成人一区在线| 亚洲成人激情视频| 亚洲欧美在线免费观看| 美女国内精品自产拍在线播放| 日韩av免费看| 国自在线精品视频| 欧美日韩午夜剧场| 一区二区av在线| 国内精品久久久久久| 91精品国产91久久久久久| 欧美在线观看一区二区三区| 亚洲一区二区日本| 亚洲天堂一区二区三区| 亚洲天堂第二页| 国产日韩欧美中文在线播放| 国产玖玖精品视频| 国产免费一区二区三区香蕉精| 情事1991在线| 久久精品91久久久久久再现| 美日韩精品免费视频| 国产成人一区二区| 国产91精品高潮白浆喷水| 欧美精品成人在线| 色噜噜亚洲精品中文字幕| 亚洲美女av在线| 欧美乱人伦中文字幕在线| 亚洲欧美国产日韩天堂区| 欧美日韩成人在线视频| 欧美福利视频在线| 中文字幕综合在线| 亚洲美女av在线| 69国产精品成人在线播放| 久久久久久亚洲精品中文字幕| 亚洲欧美日韩天堂| 日韩精品欧美激情| 欧美日韩精品在线观看| 成人美女av在线直播| 久久久久久中文字幕| 久久精品视频在线观看| 久久精品视频网站| 国产精品igao视频| 国产日韩欧美自拍| 日韩美女在线观看| 国产精品视频26uuu| 日韩美女主播视频| 尤物九九久久国产精品的分类| 岛国av一区二区| 久久香蕉频线观| 中文在线不卡视频| 亚洲淫片在线视频| 精品亚洲一区二区三区在线播放| 亚洲精品自拍第一页| 日韩av综合网| 日韩欧美在线播放| 中文字幕亚洲无线码在线一区| 91精品国产网站| 国产精品网站入口| 久久精品欧美视频| 久久九九免费视频| 亚洲日本欧美中文幕| 亚洲精品一区在线观看香蕉| 福利微拍一区二区| 欧美成人合集magnet| 亚洲人成在线一二| 日韩欧美黄色动漫| 亚洲最大的网站| 日韩欧美一区二区在线| 国产伦精品免费视频| 亚洲片在线观看| 日产日韩在线亚洲欧美| 高跟丝袜欧美一区| 激情成人在线视频| 久久久精品在线| 亚洲天堂网站在线观看视频| 久久精品国产99国产精品澳门| 亚洲精品国产suv| 亚洲欧美日韩国产中文专区| 日韩在线视频观看正片免费网站| 亚洲国产精品99久久| 91超碰caoporn97人人| 国产一区在线播放| 精品美女久久久久久免费| 欧美极度另类性三渗透| 成人网在线视频| 亚洲成人亚洲激情| 国产精品久久久久久亚洲影视| 久久中文字幕一区| 亚洲欧洲一区二区三区在线观看| 欧美午夜激情在线| 中文字幕免费国产精品| 精品免费在线视频| 亚洲国产精品国自产拍av秋霞| 在线观看国产精品淫| 黄色一区二区在线| 久久久视频精品| 欧美福利在线观看| 亚洲精品久久在线| 97免费视频在线播放| 亚洲精品美女久久久久| 欧美精品在线观看91| 国产精品一久久香蕉国产线看观看| 性欧美长视频免费观看不卡| 国产一区二区三区三区在线观看| 亚洲人午夜色婷婷| 国产精品久久久久久久久久东京| 夜夜狂射影院欧美极品| 欧美一级黄色网| 久久99视频免费| 国外日韩电影在线观看| 成人午夜在线影院| 在线丨暗呦小u女国产精品| 亚洲经典中文字幕| 国产成人精品综合久久久| 日本伊人精品一区二区三区介绍| 国产精品自拍偷拍视频| 亚洲成人中文字幕| 少妇高潮久久77777| 97香蕉久久超级碰碰高清版| 国产精品久久久久福利| 欧美性视频在线| 国产精品国模在线| 91精品国产91久久久久久不卡| 最近2019中文免费高清视频观看www99| 欧美理论电影在线观看| 日韩欧美高清在线视频| 国产欧美日韩精品丝袜高跟鞋| 国产精品高潮呻吟久久av野狼| 日本欧美在线视频| 亚洲国产一区二区三区在线观看| 欧美激情精品久久久久久免费印度| 精品国产91乱高清在线观看| 日韩不卡在线观看|