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 获取对象 根据属性、内容匹配, 还有表单元素匹配
May 31 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
Jan 31 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
Mar 09 Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 Javascript
javascript 玩转Date对象(实例讲解)
Jul 11 Javascript
老生常谈javascript的面向对象思想
Aug 22 Javascript
js使用generator函数同步执行ajax任务
Sep 05 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
Sep 18 Javascript
angularJS自定义directive之带参方法传递详解
Oct 09 Javascript
3分钟了解vue数据劫持的原理实现
May 01 Javascript
JS字符串补全方法padStart()和padEnd()
May 27 Javascript
Vue3不支持Filters过滤器的问题
Sep 24 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中遍历stdclass object的实现代码
2011/06/09 PHP
Array of country list in PHP with Zend Framework
2011/10/17 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
php中并发读写文件冲突的解决方案
2013/10/25 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
php跨域调用json的例子
2013/11/13 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
初学node.js中实现删除用户路由
2019/05/27 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
快速入门python学习笔记
2017/12/06 Python
windows下Virtualenvwrapper安装教程
2017/12/13 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
Django日志及中间件模块应用案例
2020/09/10 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
公司董事长岗位职责
2014/06/08 职场文书
投资意向书
2014/07/30 职场文书
个人总结怎么写
2015/02/26 职场文书
员工考勤管理制度
2015/08/06 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS