js实现带搜索功能的下拉框

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

1、介绍

在实现下拉框的时候,如果用select+option可以在满足pc端的需求,但如果需应用到手机端,由于select的样式太丑。所以接下来利用div+p实现到输入文本的下拉框

2、思路

1 利用一个input充当搜索框,div+p充当下拉框放置于input的下方。如图所示:

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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • angularJs-$http实现百度搜索时的动态下拉框示例

    实例如下所示: <!DOCTYPE html> <html ng-app="myApp"> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> div{ overflow: hidden; margin-top: 50px; margin-left: 500px; } .con

  • javascript实现省市区三级联动下拉框菜单

    本文实例讲述了javascript实现省市区三级联动下拉框菜单代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title> <!-- 使用QQ的省市区数据 --> <!-- <script type="text/javascript" src="http:/

  • Extjs中ComboBoxTree实现的下拉框树效果(自写)

    最近涉及到的一个项目中,需要实现ComboBoxTree的效果,首先,看看效果吧--  在Extjs中是没有这种效果的,所以得自己写,在网络上看了看别人的资料,自己再总结了一下,修改了一下,代码如下: 复制代码 代码如下: Ext.ux.TreeCombo = Ext.extend(Ext.form.ComboBox, { constructor: function (cfg) { cfg = cfg || {}; Ext.ux.TreeCombo.superclass.constructor.

  • 省市区三级联动下拉框菜单javascript版

    实现省市区三级下拉列表框,并且要实现联动效果. 方法一: 1.视图代码 <select class="prov" id="prov5" name="Province" data-code="@Model.Province"> </select> <select class="city" id="city5" name="City" dat

  • JS实现下拉框的动态添加(附效果)

    效果展示: 页面初加载时:      选择车类型后:      选择车颜色后:     JS实现下拉框的动态添加,网页代码如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www

  • jquery及原生js获取select下拉框选中的值示例

    现在有一id=test的下拉框,怎么拿到选中的那个值呢? 分别使用javascript原生的方法和jquery方法 复制代码 代码如下: <select id="test" name=""> <option value="1">text1</option> <option value="2">text2</option> </select> 一:javas

  • js实现select下拉框选择

    最近在做一个项目需要兼容到ie不同版本,在使用select时遇到了各种问题.后来索性就自己使用原生js实现了这样一个下拉框,话不多说,直接上代码吧. <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义select</title> </head> <style> *{ margin: 0; padding: 0; } #m

  • javascript下拉框选项单击事件的例子分享

    我本人是从事前端开发的技术人员,下拉框是我们应用的比较多的页面元素,今天我结合实际工作中遇到的问题说一下关于下拉框注册事件的一些例子,希望对大家有所帮助. 复制代码 代码如下: <select name="" id="sel"> <option value="111">1</option> <option value="222">2</option> <opti

  • js实现带搜索功能的下拉框实时搜索实时匹配

    1. 当select输入框中每输入一点内容的时候,在option中找出与内容匹配的选项显示在option的前面选项中. 2. 如何获取每次输入的内容,当keyup的时候触发函数. 问题:select标签中可以输入内容吗?(解决:另一篇文章可选择和输入的下拉列表框 ) 3. 如何获得输入框中的内容?(解决,在输入框上添加onkeyup时间触发的函数用js获得) 4. 如何匹配?(解决) 4.1 如何获得所有option中的内容?(解决) 复制代码 代码如下: function getSelectT

  • Vue.js 2.0中select级联下拉框实例

    在网上搜索了Vuejs2.0 动态级联select许久未果,决定自己总结一下自己的经验,有关select在Vue.js 2.0版本中的应用.首先我先说一下的我使用的技术,我参考了网上成熟的经验,选择以Vue.js 2.0+Vue-router+Vuex的全家桶. select首先要区分单选和多选,v-model在select单选和多选上有区别.     select单选实例: <select v-model="fruit"> <option selected valu

随机推荐