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 相关文章推荐
jQuery Select(单选) 模拟插件 V1.3.62 改进版
Jul 17 Javascript
js创建子窗口并且回传值示例代码
Jul 02 Javascript
实例说明为什么不要行内使用javascript
Apr 18 Javascript
jQuery使用$.ajax进行即时验证实例详解
Dec 11 Javascript
AngularJS基础 ng-click 指令示例代码
Aug 01 Javascript
Jquery删除css属性的简单方法
Dec 04 Javascript
Angular2开发——组件规划篇
Mar 28 Javascript
three.js中3D视野的缩放实现代码
Nov 16 Javascript
koa+mongoose实现简单增删改查接口的示例代码
May 13 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
Sep 17 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
Feb 11 Javascript
原生js实现九宫格拖拽换位
Jan 26 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 date函数参数详解
2006/11/27 PHP
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
php数组转成json格式的方法
2015/03/09 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
python连接池实现示例程序
2013/11/26 Python
python连接MySQL数据库实例分析
2015/05/12 Python
python3.5仿微软计算器程序
2020/03/30 Python
利用Python实现Windows定时关机功能
2017/03/21 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
经理岗位职责范本
2015/04/15 职场文书