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 相关文章推荐
动态创建样式表在各浏览器中的差异测试代码
Sep 13 Javascript
图片Slider 带左右按钮的js示例
Aug 30 Javascript
键盘KeyCode值列表汇总
Nov 26 Javascript
利用window.name实现windowStorage代码分享
Jan 02 Javascript
javascript下使用Promise封装FileReader
Feb 19 Javascript
JS加载iFrame出现空白问题的解决办法
May 13 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
May 27 Javascript
Web纯前端“旭日图”实现元素周期表
Mar 10 Javascript
JS实现中英文混合文字溢出友好截取功能
Aug 06 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
jquery实现直播弹幕效果
Nov 28 jQuery
vue项目里面引用svg文件并给svg里面的元素赋值
Aug 17 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
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
Python中DJANGO简单测试实例
2015/05/11 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Python读写压缩文件的方法
2020/07/30 Python
Python 爬虫性能相关总结
2020/08/03 Python
selenium如何定位span元素的实现
2021/01/13 Python
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
一年级班主任感言
2014/03/08 职场文书
励志演讲稿范文
2014/04/29 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
三峡人家导游词
2015/01/31 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
护士业务学习心得体会
2016/01/25 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android