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代码
Jul 20 Javascript
关于javascript中this关键字(翻译+自我理解)
Oct 20 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 Javascript
js实现倒计时时钟的示例代码
Dec 17 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
Oct 25 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
Jan 12 Javascript
JavaScript的模块化开发框架Sea.js上手指南
May 12 Javascript
javascript实现无法关闭的弹框
Nov 27 Javascript
jQuery操作json常用方法示例
Jan 04 Javascript
微信小程序-滚动消息通知的实例代码
Aug 03 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
Oct 26 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
Angularjs基础知识及示例汇总
2015/01/22 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
python 设置文件编码格式的实现方法
2017/12/21 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
python 通过exifread读取照片信息
2020/12/24 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
介绍一下UNIX启动过程
2013/11/14 面试题
出国留学自荐信
2013/10/25 职场文书
《小小雨点》教学反思
2014/02/18 职场文书
超市开学活动方案
2014/03/01 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
卡特教练观后感
2015/06/08 职场文书
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL
JavaScript设计模式之原型模式详情
2022/06/21 Javascript