js實(shí)現(xiàn)帶搜索功能的下拉框
本文實(shí)例為大家分享了js實(shí)現(xiàn)帶搜索功能的下拉框,供大家參考,具體內(nèi)容如下
1、介紹
在實(shí)現(xiàn)下拉框的時(shí)候,如果用select+option可以在滿足pc端的需求,但如果需應(yīng)用到手機(jī)端,由于select的樣式太丑。所以接下來(lái)利用div+p實(shí)現(xiàn)到輸入文本的下拉框
2、思路
1 利用一個(gè)input充當(dāng)搜索框,div+p充當(dāng)下拉框放置于input的下方。如圖所示:
2 接下來(lái)就是js的實(shí)現(xiàn)了,我們先把紅色區(qū)域的div+p利用display:none隱藏起來(lái)。
對(duì)表單input添加onfocus事件,當(dāng)input獲取焦點(diǎn)的時(shí)候獲取顯示紅色區(qū)域。
在對(duì)表單添加oninput事件,根據(jù)input的字段篩選出有關(guān)的p標(biāo)簽即可
3 對(duì)紅色區(qū)域的div設(shè)置點(diǎn)擊事件,利用事件委托將點(diǎn)擊的p標(biāo)簽的值賦值到input上即可。
3、代碼
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> </head> <style> *{ margin: 0; padding: 0; } .search{ border: 1px solid transparent; width: 400px; height: 80px; margin: 0 auto; } .search input{ border: 1px solid gray; width: 200px; height: 80px; } .content{ width: 200px; /* height: 80px; */ border: 1px solid red; overflow-y: auto; max-height: 60px; } .content p { height: 20px; } </style> <body onload="onload()"> <div class="search"> <input id="input" type="text" placeholder="請(qǐng)輸入" onfocus="showDiv()" oninput="filterP()"> <div id="dataList" class="content" onclick="pushInput()" style="display:none;"> <p>123</p> <p>159</p> <p>147</p> <p>163</p> </div> </div> <script> var dataArr = []; var dataList = document.getElementById('dataList'); function onload() { //初始化dataArr的數(shù)據(jù) var childs = dataList.children; //在IE下注釋也算節(jié)點(diǎn),不能用于 for (var i = 0; i < childs.length; i++) { dataArr.push(childs[i].innerText); } console.log(dataArr); } function showDiv() { dataList.style.display = ""; } function filterP() { var e = event.target || event.srcElement; var str = e.value; console.log(str); dataList.innerHTML = ''; //清空div下的所有P元素 dataArr.forEach(function (item) { if (item.indexOf(str) != -1) { var p = document.createElement('p'); var text = document.createTextNode(item); p.appendChild(text); dataList.appendChild(p); } }) console.log("dataList.innerHTML:" + dataList.innerHTML) if (dataList.innerHTML == '') { var p = document.createElement('p'); var text = document.createTextNode('暫無(wú)數(shù)據(jù)'); p.style.color = '#d7d7d7'; p.onclick = function () { event.stopImmediatePropagation(); } //阻止事件的冒泡 p.appendChild(text); dataList.appendChild(p); } } function pushInput() { //利用事件委托機(jī)制,獲取點(diǎn)擊的P源 var e = event.target || event.srcElement; var input = document.getElementById('input'); input.value = e.innerText; dataList.style.display = 'none'; } /** stopImmediatePropagation() 和 stopPropagation()的區(qū)別在哪兒呢? 后者只會(huì)阻止冒泡或者是捕獲。 但是前者除此之外還會(huì)阻止該元素的其他事件發(fā)生,但是后者就不會(huì)阻止其他事件的發(fā)生 **/ </script> </body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解ES6 擴(kuò)展運(yùn)算符的使用與注意事項(xiàng)
擴(kuò)展運(yùn)算符 (spread syntax) 是 ES6 提供的一種非常便捷的新語(yǔ)法,給我們操作數(shù)組和對(duì)象帶來(lái)了非常大的便利,我在很多文章中也提到了這個(gè)語(yǔ)法。但是其實(shí)擴(kuò)展運(yùn)算符的用法還是比較多比較雜的,我用一篇文章來(lái)做一下總結(jié),梳理一下擴(kuò)展運(yùn)算的語(yǔ)法和使用細(xì)節(jié)。2020-11-11利用JS實(shí)現(xiàn)一個(gè)同Excel表現(xiàn)的智能填充算法
這篇文章主要給大家介紹了關(guān)于利用JS實(shí)現(xiàn)一個(gè)同Excel表現(xiàn)的智能填充算法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08檢測(cè)一個(gè)函數(shù)是否是JavaScript原生函數(shù)的小技巧
這篇文章主要介紹了檢測(cè)一個(gè)函數(shù)是否是JavaScript原生函數(shù)的小技巧,本文給出了兩種檢測(cè)方法,需要的朋友可以參考下2015-03-03微信小程序教程系列之頁(yè)面跳轉(zhuǎn)和參數(shù)傳遞(6)
這篇文章主要為大家詳細(xì)介紹了微信小程序教程系列之頁(yè)面跳轉(zhuǎn)和參數(shù)傳遞,微信小程序提供了3種頁(yè)面跳轉(zhuǎn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04躲避這些會(huì)改變?cè)瓟?shù)組JavaScript數(shù)組方法讓開(kāi)發(fā)流暢無(wú)阻
JavaScript中有些數(shù)組的操作方法并不符合我們預(yù)期,容易導(dǎo)致想象不到的結(jié)果,因此,為避免這種情況的發(fā)生,本文將介紹哪些原生數(shù)組方法能改變?cè)瓟?shù)組以及我對(duì)于如何更好地使用數(shù)組方法的建議2023-05-05js中AppendChild與insertBefore的用法詳細(xì)解析
這篇文章主要是對(duì)js中AppendChild與insertBefore的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12Bootstrap模態(tài)對(duì)話框的簡(jiǎn)單使用
這篇文章主要為大家詳細(xì)介紹了Bootstrap模態(tài)對(duì)話框的簡(jiǎn)單使用,感興趣的小伙伴們可以參考一下2016-04-04整理JavaScript創(chuàng)建對(duì)象的八種方法
JavaScript創(chuàng)建對(duì)象的方法有很多種,本文給大家介紹javascript創(chuàng)建對(duì)象的八種方法,對(duì)javascript創(chuàng)建對(duì)象感興趣的朋友可以參考下本篇文章2015-11-11