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 相关文章推荐
top.location.href 没有权限 解决方法
Aug 05 Javascript
js实现上传图片之上传前预览图片
Mar 25 Javascript
Knockout text绑定DOM的使用方法
Nov 15 Javascript
jquery列表拖动排列(由项目提取相当好用)
Jun 17 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
Aug 18 Javascript
jQuery中:visible选择器用法实例
Dec 30 Javascript
jQuery动态背景图片效果实现方法
Jul 03 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
Sep 21 Javascript
函数四种调用模式以及其中的this指向
Jan 16 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
Jan 12 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
Apr 03 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
CURL状态码列表(详细)
2013/06/27 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
js图片上传的封装代码
2017/08/01 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
Python 返回汉字的汉语拼音
2009/02/27 Python
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python实现简单字典树的方法
2016/04/29 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
利用python实现AR教程
2019/11/20 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
Python如何对齐字符串
2020/07/30 Python
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
物理研修随笔感言
2014/02/14 职场文书
道德模范先进事迹
2014/02/14 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
小学运动会加油稿
2015/07/22 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL