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 相关文章推荐
深入认识javascript中的eval函数
Nov 02 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
Jul 09 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
Oct 14 Javascript
浅谈javascript函数式编程
Sep 06 Javascript
javascript设置页面背景色及背景图片的方法
Dec 29 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
Mar 11 Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 Javascript
AngularJS中的作用域实例分析
May 16 Javascript
vue实现element-ui对话框可拖拽功能
Aug 17 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
Jan 02 Javascript
js实现简易拖拽的示例
Oct 26 Javascript
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
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
建立动态的WML站点(一)
2006/10/09 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
浅谈javascript回调函数
2014/12/07 Javascript
JavaScript计时器示例分析
2015/02/05 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
Python出现segfault错误解决方法
2016/04/16 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
python和js交互调用的方法
2020/06/23 Python
python 实现汉诺塔游戏
2020/11/28 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
某公司面试题
2012/03/05 面试题
副总经理工作职责
2013/11/28 职场文书
单位门卫岗位职责
2013/12/20 职场文书
装修五一活动策划案
2014/01/23 职场文书
乔迁之喜主持词
2014/03/27 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
国庆节慰问信
2015/02/15 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书