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替换除数字与逗号以外的所有字符的代码
Jun 07 Javascript
js实现局部页面打印预览原理及示例代码
Jul 03 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
Oct 15 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 Javascript
JavaScript 随机验证码的生成实例代码
Sep 22 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
Dec 02 Javascript
利用canvas实现的加载动画效果实例代码
Jul 05 Javascript
动手写一个angular版本的Message组件的方法
Dec 16 Javascript
一看就会的vuex实现登录验证(附案例)
Jan 09 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 Javascript
JavaScript实现串行请求的示例代码
Sep 14 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
Firefox div高度自适应
2009/04/28 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
python 日期排序的实例代码
2019/07/11 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
打造高效课堂实施方案
2014/03/22 职场文书
跳蚤市场口号
2014/06/13 职场文书
国庆促销活动总结
2014/08/29 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
升学宴答谢词
2015/01/05 职场文书
义诊活动总结
2015/02/04 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python