自動(dòng)完成的搜索框javascript實(shí)現(xiàn)
在很多需要搜索的網(wǎng)站, 都會(huì)有一個(gè)自動(dòng)完成的搜索框. 方便用戶查找他們想要的搜索詞. 幫助用戶快速找到自己想要的結(jié)果. 這種方式是比較友好的. 所以是比較提倡使用的.
我們這次就來(lái)實(shí)現(xiàn)這一效果. 我們通過(guò)兩篇文章來(lái)進(jìn)行講解. 首先我們來(lái)完成界面的設(shè)計(jì)布局.
界面的HTML結(jié)構(gòu), 第一個(gè)少不了的是一個(gè)搜索框, 第二個(gè)就是搜索的點(diǎn)擊按鈕.
<div class="search"> <input type="text" value=""> <button>搜索</button> </div>
這就是最簡(jiǎn)單的搜索框的設(shè)計(jì). 那CSS代碼怎么處理. 以前用得多的是使用float來(lái)進(jìn)行處理, 然后給搜索框一個(gè)邊框,設(shè)置一個(gè)padding. 然后給按鈕去除邊框,設(shè)置一個(gè)背景. 這里我們使用flex布局方式. 這樣更簡(jiǎn)便點(diǎn). 不用考慮清除浮動(dòng)效果.當(dāng)然這里就要考慮兼容性問(wèn)題了.
.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; }
這時(shí)候我們繼續(xù)往下考慮, 如果用戶輸入了關(guān)鍵詞, 那就得顯示一個(gè)列表的相關(guān)詞語(yǔ). 那這時(shí)候我們需要加入一個(gè)詞語(yǔ)列表.
比如
<ul> <li><a href="#">武林外傳</a> </li> <li><a href="#">葵花寶典</a> </li> <li><a href="#">如來(lái)佛掌</a> </li> <li><a href="#">九陰白骨爪</a> </li> </ul>
我們將這行代碼追加到.search的內(nèi)容后面.然后設(shè)置CSS代碼, 我們?cè)O(shè)置他的最小寬度為.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代碼之前, 將默認(rèn)的一些瀏覽器樣式清除.最后效果如下.
好了.下面我們完成JS的代碼控制.
我們來(lái)分析下, 其中的事件. 用戶在輸入框輸入文字后, 將輸入的文字與后臺(tái)數(shù)據(jù)做查詢, 查詢到后返回給客戶端, 然后將返回的數(shù)據(jù)顯示在數(shù)據(jù)列表下.
根據(jù)這個(gè)步驟, 我們首先是獲取輸入框標(biāo)簽, 給這個(gè)標(biāo)簽添加onkeyup事件
var ele_key = document.getElementById("key"); ele_key.onkeyup = function (e) { //處理事件 }
這里我們模擬一個(gè)后臺(tái)數(shù)據(jù), 這里用數(shù)據(jù)來(lái)表示,然后加入一些數(shù)據(jù)
var data = ["編程的人", "武林外傳", "葵花寶典", "九陰白骨爪", "武林江湖", "will"];
后臺(tái)數(shù)據(jù)有了, 事件也添加了. 這時(shí)候我們對(duì)數(shù)據(jù)進(jìn)行處理了.
首先是獲取用輸入的數(shù)據(jù), 來(lái)然后與后臺(tái)數(shù)據(jù)進(jìn)行比較. 然后將比較后的數(shù)據(jù)保存在一個(gè)數(shù)據(jù)里面.
//定義一些數(shù)據(jù) var data = ["編程的人", "武林外傳", "葵花寶典", "九陰白骨爪", "武林江湖", "will"]; var ele_key = document.getElementById("key"); ele_key.onkeyup = function (e) { var val = this.value; //獲取輸入框里匹配的數(shù)據(jù) 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]); } } }
繼續(xù)往下分析, 目前我們獲取到后臺(tái)查詢到的數(shù)據(jù)后, 那就得將這個(gè)數(shù)據(jù)顯示給用戶查看, 這里我們顯示在數(shù)據(jù)列表中.
//定義一些數(shù)據(jù) var data = ["編程的人", "武林外傳", "葵花寶典", "九陰白骨爪", "武林江湖", "will"]; var ele_key = document.getElementById("key"); ele_key.onkeyup = function (e) { var val = this.value; //獲取輸入框里匹配的數(shù)據(jù) 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]); } } //獲取到的數(shù)據(jù)準(zhǔn)備追加顯示, 前期要做的事情: 清空數(shù)據(jù),然后顯示數(shù)據(jù)列表,如果獲取到的數(shù)據(jù)為空,則不顯示 var ele_datalist = document.getElementById("datalist"); ele_datalist.style.visibility = "visible"; ele_datalist.innerHTML = ""; if (srdata.length == 0) { ele_datalist.style.visibility = "hidden"; } //將搜索到的數(shù)據(jù)追加到顯示數(shù)據(jù)列表, 然后每一行加入點(diǎn)擊事件, 點(diǎn)擊后將數(shù)據(jù)放入搜索框內(nèi), 數(shù)據(jù)列表隱藏 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); } }
在添加數(shù)據(jù)到列表中時(shí), 我們首先對(duì)數(shù)據(jù)列表做初始化處理,避免重復(fù)數(shù)據(jù)的添加. 其次就是我們給數(shù)據(jù)列表的每一行添加了一個(gè)點(diǎn)擊事件,點(diǎn)擊后將數(shù)據(jù)放入搜索框內(nèi), 數(shù)據(jù)列表隱藏.
在這里整個(gè)自動(dòng)完成的搜索框就完成了.我們來(lái)測(cè)試下效果.
這里可能是錄制軟件問(wèn)題, 邊框與它錄制的背景顏色應(yīng)該一樣了. 邊框不見(jiàn)了(⊙﹏⊙)b
以上就是JAVASCRIPT實(shí)現(xiàn)搜索框的自動(dòng)完成效果,大家可以自己測(cè)試玩玩!
- js實(shí)現(xiàn)搜索框關(guān)鍵字智能匹配代碼
- 基于Vue.js實(shí)現(xiàn)簡(jiǎn)單搜索框
- JavaScript實(shí)現(xiàn)搜索框的自動(dòng)完成功能(一)
- JS實(shí)現(xiàn)仿google、百度搜索框輸入信息智能提示的實(shí)現(xiàn)方法
- JavaScript實(shí)現(xiàn)百度搜索框效果
- JS+Ajax實(shí)現(xiàn)百度智能搜索框
- JS實(shí)現(xiàn)京東首頁(yè)之頁(yè)面頂部、Logo和搜索框功能
- JS實(shí)現(xiàn)微信彈出搜索框 多條件查詢功能
- javascript搜索框效果實(shí)現(xiàn)方法
- JavaScript仿京東搜索框?qū)嵗?/a>
相關(guān)文章
JS實(shí)現(xiàn)禁止鼠標(biāo)右鍵的功能
遇到網(wǎng)頁(yè)上有精美圖片或者精彩文字想保存時(shí),通常大家都是選中目標(biāo)后按鼠標(biāo)右鍵,在彈出菜單中選擇“圖片另存為”或“復(fù)制”來(lái)達(dá)到我們的目的。但是,目前有許多網(wǎng)頁(yè)都屏蔽了鼠標(biāo)右鍵,那么用js如何實(shí)現(xiàn)禁止鼠標(biāo)右鍵的功能呢?下面小編給大家介紹下2016-10-10BootStrap.css 在手機(jī)端滑動(dòng)時(shí)右側(cè)出現(xiàn)空白的原因及解決辦法
這篇文章主要介紹了BootStrap.css 在手機(jī)端滑動(dòng)時(shí)右側(cè)出現(xiàn)空白的原因及解決辦法的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06JavaScript 組件之旅(二)編碼實(shí)現(xiàn)和算法
話說(shuō)上期我們討論了隊(duì)列管理組件的設(shè)計(jì),并且給它取了個(gè)響亮而獨(dú)特的名字:Smart Queue. 這次,我們要將之前的設(shè)計(jì)成果付諸實(shí)踐,用代碼來(lái)實(shí)現(xiàn)它。2009-10-10input獲取焦點(diǎn)時(shí)底部菜單被頂上來(lái)問(wèn)題的解決辦法
這篇文章主要介紹了解決input獲取焦點(diǎn)時(shí)底部菜單被頂上來(lái)問(wèn)題的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下2017-01-01兩個(gè)函數(shù)相互調(diào)用如何防止死循環(huán)
這篇文章主要介紹了兩個(gè)函數(shù)相互調(diào)用如何防止死循環(huán)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03JS實(shí)現(xiàn)的簡(jiǎn)單輪播圖運(yùn)動(dòng)效果示例
這篇文章主要介紹了JS實(shí)現(xiàn)的簡(jiǎn)單輪播圖運(yùn)動(dòng)效果,結(jié)合完整實(shí)例形式分析了javascript基于定時(shí)器動(dòng)態(tài)修改頁(yè)面元素屬性的相關(guān)操作技巧,需要的朋友可以參考下2016-12-12jq.ajax+php+mysql實(shí)現(xiàn)關(guān)鍵字模糊查詢(示例講解)
下面小編就為大家分享一篇jq.ajax+php+mysql實(shí)現(xiàn)關(guān)鍵字模糊查詢(示例講解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01比較簡(jiǎn)單實(shí)用的使用正則三種版本的js去空格處理方法
比較簡(jiǎn)單實(shí)用的使用正則三種版本的js去空格處理方法...2007-11-11