html搜索框下拉怎么做,js实现带搜索功能的下拉框

本文介绍了如何使用JavaScript实现一个具有搜索功能的HTML下拉框,代替传统的select标签。通过监听input的onfocus和oninput事件,实现实时筛选匹配项,并在点击下拉选项时将值填充回输入框。详细步骤包括创建样式、显示隐藏切换、筛选功能和事件委托处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文实例为大家分享了js实现带搜索功能的下拉框,供大家参考,具体内容如下

1、介绍

在实现下拉框的时候,如果用select+option可以在满足pc端的需求,但如果需应用到手机端,由于select的样式太丑。所以接下来利用div+p实现到输入文本的下拉框

2、思路

1 利用一个input充当搜索框,div+p充当下拉框放置于input的下方。如图所示:

3ecf579d8ad281d265cd069e3d9b4593.png

2 接下来就是js的实现了,我们先把红色区域的div+p利用display:none隐藏起来。

对表单input添加onfocus事件,当input获取焦点的时候获取显示红色区域。

在对表单添加oninput事件,根据input的字段筛选出有关的p标签即可

3 对红色区域的div设置点击事件,利用事件委托将点击的p标签的值赋值到input上即可。

3、代码

*{

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;

}

var dataArr = [];

var dataList = document.getElementById('dataList');

function onload() { //初始化dataArr的数据

var childs = dataList.children; //在IE下注释也算节点,不能用于

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('暂无数据');

p.style.color = '#d7d7d7';

p.onclick = function () { event.stopImmediatePropagation(); } //阻止事件的冒泡

p.appendChild(text);

dataList.appendChild(p);

}

}

function pushInput() { //利用事件委托机制,获取点击的P源

var e = event.target || event.srcElement;

var input = document.getElementById('input');

input.value = e.innerText;

dataList.style.display = 'none';

}

/**

stopImmediatePropagation() 和 stopPropagation()的区别在哪儿呢?

后者只会阻止冒泡或者是捕获。 但是前者除此之外还会阻止该元素的其他事件发生,但是后者就不会阻止其他事件的发生

**/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值