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()函数的三种语法介绍
Oct 09 Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
Sep 04 Javascript
利用纯Vue.js构建Bootstrap组件
Nov 03 Javascript
Webpack执行命令参数详解
Jun 17 Javascript
分析JS单线程异步io回调的特性
Dec 01 Javascript
vue2.0 父组件给子组件传递数据的方法
Jan 15 Javascript
除Console.log()外更多的Javascript调试命令
Jan 24 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
Feb 21 Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 Javascript
node获取客户端ip功能简单示例
Aug 24 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 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
thinkphp连贯操作实例分析
2014/11/22 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
phpwind放自动注册方法
2006/12/02 Javascript
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
python中的函数用法入门教程
2014/09/02 Python
python机器学习之神经网络(一)
2017/12/20 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
python实现名片管理系统项目
2019/04/26 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
python 制作磁力搜索工具
2021/03/04 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
实习销售业务员自我鉴定
2013/09/21 职场文书
学习新党章思想汇报
2014/01/09 职场文书
周年庆典主持词
2014/04/02 职场文书
战友聚会策划方案
2014/06/13 职场文书
本科应届生求职信
2014/08/05 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
Python实现位图分割的效果
2021/11/20 Python