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 validation插件表单验证的一个例子
Mar 03 Javascript
JavaScript中的一些定位属性[图解]
Jul 14 Javascript
jQuery实现div浮动层跟随页面滚动效果
Feb 11 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
javascript正则表达式基础知识入门
Apr 20 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
May 16 Javascript
Javascript 跨域知识详细介绍
Oct 30 Javascript
分析JavaScript数组操作难点
Dec 18 Javascript
Vue源码解读之Component组件注册的实现
Aug 24 Javascript
深入理解es6块级作用域的使用
Mar 28 Javascript
vue如何实现自定义底部菜单栏
Jul 01 Javascript
Node.js API详解之 module模块用法实例分析
May 13 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
javascript 文档的编码问题解决
2009/03/01 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
Prototype框架详解
2015/11/25 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
Python Tkinter简单布局实例教程
2014/09/03 Python
python实现名片管理系统项目
2019/04/26 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
python 实现简易的记事本
2020/11/30 Python
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
称象教学反思
2014/02/03 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
普通话演讲稿
2014/09/03 职场文书
教师节横幅标语
2014/10/08 职场文书
项目验收申请报告
2015/05/15 职场文书
春节随笔
2015/08/15 职场文书
java版 简单三子棋游戏
2022/05/04 Java/Android