1. 程式人生 > 程式設計 >js實現帶搜尋功能的下拉框

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>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。