首頁 > web前端 > js教程 > 主體

自動完成的搜尋框javascript實作_javascript技巧

WBOY
發布: 2016-05-16 15:13:17
原創
1177 人瀏覽過

在很多需要搜尋的網站, 都會有一個自動完成的搜尋框. 方便用戶查找他們想要的搜尋字詞. 幫助用戶快速找到自己想要的結果. 這種方式是比較友好的. 所以是比較提倡使用的.

我們這次就來實現這一效果. 我們透過兩篇文章來進行講解. 首先我們來完成介面的設計佈局.

介面的HTML結構, 第一個少不了的是一個搜尋框, 第二個就是搜尋的點擊按鈕.

 <div class="search">
     <input type="text" value="">
     <button>搜索</button>
 </div>
登入後複製

這就是最簡單的搜尋框的設計. 那CSS程式碼怎麼處理. 以前用得多的是使用float來進行處理, 然後給搜尋框一個邊框,設定一個padding. 然後給按鈕去除邊框,設定一個背景. 這裡我們使用flex佈局方式. 這樣更簡單點. 不用考慮清除浮動效果.當然這裡就要考慮兼容性問題了.

.search {
  display: inline-flex;
  height: 35px;
  margin: 50px auto;
  position: relative;
}
.search input {
  border: #eee 1px solid;
  background-color: #fff;
  outline: none;
  width: 200px;
  padding: 0 5px;
}
.search button {
  background-color: #ff3300;
  color: #fff;
  border: none;
  width: 80px;
}
登入後複製

這時候我們繼續往下考慮, 如果用戶輸入了關鍵字, 那就得顯示一個列表的相關詞語. 那這時候我們需要加入一個詞語列表.

<ul>
  <li><a href="#">武林外传</a> </li>
  <li><a href="#">葵花宝典</a> </li>
  <li><a href="#">如来佛掌</a> </li>
  <li><a href="#">九阴白骨爪</a> </li>
</ul>
登入後複製

我們將這行程式碼追加到.search的內容後面.然後設定CSS程式碼, 我們設定他的最小寬度為.search寬度減去搜尋按鈕的寬度.這樣就跟搜尋框一樣寬.

.search ul {
  position: absolute;
  left: 0;
  top: 35px;
  border: #eee 1px solid;
  min-width: calc(100% - 80px);
  text-align: left;
}
.search ul a {
  display: block;
  padding: 5px;
}

登入後複製

這得在CSS程式碼之前, 將預設的一些瀏覽器樣式清除.最後效果如下.

好了.下面我們完成JS的程式碼控制.
我們來分析下, 其中的事件. 使用者在輸入框輸入文字後, 將輸入的文字與後台資料做查詢, 查詢到後傳回給客戶端, 然後將傳回的資料顯示在資料清單下.

根據這個步驟, 我們首先是取得輸入框標籤, 給這個標籤加上onkeyup事件

 var ele_key = document.getElementById("key");
 ele_key.onkeyup = function (e) {
   //处理事件
 }
登入後複製

這裡我們模擬一個後台資料, 這裡用資料來表示,然後加入一些資料

var data = ["编程的人", "武林外传", "葵花宝典", "九阴白骨爪", "武林江湖", "will"];
登入後複製

後台資料有了, 事件也添加了. 這時候我們對資料進行處理了.
首先是取得用輸入的資料, 來然後與後台資料比較. 然後將比較後的資料保存在一個資料裡面.

//定义一些数据
var data = ["编程的人", "武林外传", "葵花宝典", "九阴白骨爪", "武林江湖", "will"];
var ele_key = document.getElementById("key");
ele_key.onkeyup = function (e) {

  var val = this.value;

  //获取输入框里匹配的数据
  var srdata = [];
  for (var i = 0; i < data.length; i++) {
    console.log(data[i].indexOf(val))
    if (val.trim().length > 0 && data[i].indexOf(val) > -1) {
       srdata.push(data[i]);
    }
  }

 }
登入後複製

繼續往下分析, 目前我們取得到後台查詢到的資料後, 那就得將這個資料顯示給使用者查看, 這裡我們顯示在資料清單中.

//定义一些数据
var data = ["编程的人", "武林外传", "葵花宝典", "九阴白骨爪", "武林江湖", "will"];
var ele_key = document.getElementById("key");
ele_key.onkeyup = function (e) {

  var val = this.value;

  //获取输入框里匹配的数据
  var srdata = [];
  for (var i = 0; i < data.length; i++) {
    console.log(data[i].indexOf(val))
    if (val.trim().length > 0 && data[i].indexOf(val) > -1) {
       srdata.push(data[i]);
    }
  }

 //获取到的数据准备追加显示, 前期要做的事情: 清空数据,然后显示数据列表,如果获取到的数据为空,则不显示
  var ele_datalist = document.getElementById("datalist");
  ele_datalist.style.visibility = "visible";
  ele_datalist.innerHTML = "";

  if (srdata.length == 0) {
    ele_datalist.style.visibility = "hidden";
  }

  //将搜索到的数据追加到显示数据列表, 然后每一行加入点击事件, 点击后将数据放入搜索框内, 数据列表隐藏
  var self = this;
  for (var i = 0; i < srdata.length; i++) {
    var ele_li = document.createElement("li");
    var ele_a = document.createElement("a");
    ele_a.setAttribute("href", "javascript:;");
    ele_a.textContent = srdata[i];

    ele_a.onclick = function () {
       self.value = this.textContent;
      ele_datalist.style.visibility = "hidden";
    }


    ele_li.appendChild(ele_a);
    ele_datalist.appendChild(ele_li);
  }

 }

登入後複製

在新增資料到清單中時, 我們首先對資料清單做初始化處理,避免重複資料的新增. 其次是我們在資料清單的每一行中新增了一個點擊事件,點擊後將資料放入搜尋框內, 資料列表隱藏.

在這裡整個自動完成的搜尋框就完成了.我們來測試下效果.

這裡可能是錄製軟體問題, 邊框與它錄製的背景顏色應該一樣了. 邊框不見了(⊙﹏⊙)b
以上就是JAVASCRIPT實現搜尋框的自動完成效果,大家可以自己測試玩玩!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板