1. 程式人生 > >搜尋框實現,常用搜索,歷史搜尋等

搜尋框實現,常用搜索,歷史搜尋等

1、實現功能

2、頁面佈局HTML

共三部分

(1)搜尋欄

input 框,右邊是一個a標籤,可以跳轉回前一頁面。之後寫元素用來放置歷史搜尋和常用搜索。

 <form class="weui-search-bar__form" id="search-form">
            <div class="weui-search-bar__box">
                <i class="weui-icon-search"></i>
                <input type="search" class="weui-search-bar__input" id="searchInput" data-default="取快遞" placeholder="搜尋" required="">
                <a href="javascript:" class="weui-icon-clear" id="searchClear"></a>
            </div>
        </form>
        <a href="javascript:" class="weui-search-bar__cancel-btn" id="searchCancel">取消</a>

分析:weui-icon-serach 就搜尋的那個圖示,接下來是Input框,後面a標籤,class為weui-icon-clear ,是第二張圖片中清除的那個圖示。id=searchCLear是用來清空搜尋框輸入內容的。

(2)歷史搜尋,常用搜索

 <div class="search-prompt-wrapper" id="search-prompt">
        <div class="weui-cells__title" id="historySearch">歷史搜尋</div>
        <div class="weui-cells"  id="historySearchContent">
            <div class="weui-cell">
                <div id="search-prompt-history" class="content"></div>
            </div>
        </div>
        <div class="weui-cells__title"id="commonSearch">常用搜索</div>
        <div class="weui-cells"id="commonSearchContent">
            <div class="weui-cell">
                <div id="search-prompt-common" class="content"></div>
            </div>
        </div>
    </div>

 這個部分用來放置歷史搜尋項和常用搜索項。

(3)搜尋結果

<li class="goods-wrapper">
    <div class="content">
        <div class="left-user" data-user="">
            <div class="image"><img src=""></div>
            <div class="money"><span></span><img src="../img/task-item/money.png"></div>
            <div class="name"></div>
        </div>
        <div class="right-goods" data-id="">
            <div class="top"><div class="title"></div><div class="type"></div></div>
            <div class="place"><span></span></div>
            <div class="describe"><p></p></div>
            <div class="bottom">
                <div class="time"><span class="time-content"></span></div>
                <div class="operation"><span>搶單</span></div>
            </div>
        </div>
    </div>
</li>

從後臺請求獲取搜尋結果,然後用資料填充shan上面框架。

3、程式碼分析:js程式碼如下:

 /*初始化事件*/
    function initEvent() {
        /*獲取焦點*/
        $(document).ready(function () {
            $("#searchInput").focus();
        });

        /*點選軟鍵的搜尋按鈕*/
        $("#search-form").submit(function () {
            var $search_input = $("#searchInput");
            var search = $search_input.val();
            if(search.length == 0) search = $search_input.attr("data-default");
            /* 啟動搜尋過程 */
            beginSearch(search);
            return false;
        });
        /*點選清空按鈕*/
        $("#searchClear").click(function () {
            $("#searchInput").val("");
            $("#searchInput").focus();
            /*更新搜尋*/
            updatePrompt();
        });
        /*當內容改變時*/
        $("#searchClear").change(function () {
            var value = $("#searchInput").val();
            if(value.length == 0) $("#searchClear").hide(); else $("#searchClear").show();
        });

        /*點選取消按鈕*/
        $("#searchCancel").click(function () {
            location.href="index.html";
        });
    }

 一開始獲得使用者的常用搜索和歷史搜尋。

 $.get(ServerUrl + "search/popularHistory",function (data) {
            if(data.status == Status.Status_OK){
                initPromptCommon(data.data);
            }else{
                /*沒有常用搜索*/
            }
        });
        /* 歷史搜尋 */
        $.get(ServerUrl + "search/searchHistory",function (data) {
            if(data.status == Status.Status_OK){
                for(var prompt in data.data){
                    data.data[prompt] = data.data[prompt].searchRecord;
                }
                initPromptHistory(data.data);
            }else{
                /*沒有歷史搜尋*/
            }
        });

        function initPromptCommon(prompts) {
            initPrompt("#search-prompt-common", prompts);
            /* 顯示常用搜索 */
            $("#commonSearch").show();
            $("#commonSearchContent").show();
        }
        function initPromptHistory(prompts) {
            initPrompt("#search-prompt-history", prompts);
            /* 顯示歷史搜尋 */
            $("#historySearch").show();
            $("#historySearchContent").show();
        }
        function initPrompt(elm_id, prompts) {
            var $prompt = $(elm_id).empty();
            for(var prompt in prompts){
                $prompt.append('<div class="item" data-search="' + prompts[prompt] + '">' + prompts[prompt]  + '</div>');
            }
            /*點選*/
            $(elm_id + " .item").click(function () {
                var search = $(this).attr("data-search");
                beginSearch(search);
                /*這樣使用者可以清空!*/
                $("#searchInput").val(search);
            });
        }

請求歷史介面,返回的資料格式如下:

執行搜尋

 /* 獲取第page頁,並顯示*/
    function getTaskByPage(callback) {
        /*聯網獲取資料*/
        $.get(ServerUrl + "search/search",{
            keyWord: param.search,
            page: param.page
        },function (data) {
            if(data.status == Status.Status_OK){
                if(data.data.length == 0){ /* 表明已經沒有任務了 */
                    param.over = true;
                    if(param.page == 1){
                        $("#show-no-data").show();
                    }else{
                        $.toast("沒有更多了", "text");
                    }
                }else{ /* 有任務 */
                    $("#show-no-data").hide();
                    showResult(data.data);
                }
            }else/* if(data.status == Status.Status_NULL_Result)*/{ /* 空結果 */ /*表明出現問題...*/
                param.over = true;
                if(param.page == 1){
                    $("#show-no-data").show();
                }
            }

            /* 執行完成後的回掉 */
            callback();
        });
    }

 4、實現百度模糊搜尋大概思路

一開始ul id=search,沒有li元素,li元素是在向伺服器請求後自動生成。

var searchModule=function(){
    var $searchKey=$("#search");
    var $searchBox=$("searchBox");
   }
function bindData{
   var  searchKey= $searchKey.val();
   $ajax({
     url:""?wd=searchKey;
     dataType:"Jsonp";
     success:function(data){
    //對請求回來的資料進行操作  類似於  callback;
        var str="",
        $each(data,function(index,item){
              if(index<=3){
            str+="<li>"+item"</li">;
                  }
         })
        $searchBox.html(str.stop().slideDown(300));
      }
    })
   }
function init(){
    $search.on("focus keyup",function(){
          var val=$(this).val;
          if(val.length>0){ 
                 bindData();
                 return;
             }
            $searchBox.html(str.stop().slideUp(300));
         })
}