js实现带搜索功能的下拉框


Posted in Javascript onJanuary 11, 2020

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

1、介绍

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

2、思路

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

js实现带搜索功能的下拉框

2 接下来就是js的实现了,我们先把红色区域的div+p利用display:none隐藏起来。
对表单input添加onfocus事件,当input获取焦点的时候获取显示红色区域。
在对表单添加oninput事件,根据input的字段筛选出有关的p标签即可

3 对红色区域的div设置点击事件,利用事件委托将点击的p标签的值赋值到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="请输入" 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的数据
   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()的区别在哪儿呢?
后者只会阻止冒泡或者是捕获。 但是前者除此之外还会阻止该元素的其他事件发生,但是后者就不会阻止其他事件的发生
 **/
 </script>
</body>
</html>

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

Javascript 相关文章推荐
自动完成JS类(纯JS, Ajax模式)
Mar 12 Javascript
jquery 表单取值常用代码
Dec 22 Javascript
关于Javascript模块化和命名空间管理的问题说明
Dec 06 Javascript
javascript重复绑定事件造成的后果说明
Mar 02 Javascript
jQuery简单验证上传文件大小及类型的方法
Jun 02 Javascript
jQuery实现Select左右复制移动内容
Aug 05 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
省市区三级联动jquery实现代码
Apr 15 Javascript
nuxt中使用路由守卫的方法步骤
Jan 27 Javascript
jquery实现二级导航下拉菜单效果实例
May 14 jQuery
微信小程序 调用微信授权窗口相关问题解决
Jul 25 Javascript
微信小程序的授权实现过程解析
Aug 02 Javascript
js实现select下拉框选择
Jan 11 #Javascript
js实现二级联动简单实例
Jan 11 #Javascript
jQuery实现轮播图效果demo
Jan 11 #jQuery
详解微信小程序中var、let、const用法与区别
Jan 11 #Javascript
jQuery擦除插件eraser使用方法详解
Jan 11 #jQuery
详解javascript中var与ES6规范中let、const区别与用法
Jan 11 #Javascript
jQuery实现鼠标移入显示蒙版效果
Jan 11 #jQuery
You might like
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
PHP.vs.JAVA
2016/04/29 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
python try except 捕获所有异常的实例
2018/10/18 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
python获取array中指定元素的示例
2019/11/26 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
启动一个线程是用run()还是start()
2016/12/25 面试题
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
内容编辑个人求职信
2013/12/10 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
残疾人创业典型事迹
2014/02/01 职场文书
四年级小学生评语
2014/12/26 职场文书
思想道德自我评价2015
2015/03/09 职场文书
Python+Appium新手教程
2021/04/17 Python