1. 程式人生 > >JS編寫input搜尋框,類似下拉搜尋框

JS編寫input搜尋框,類似下拉搜尋框

因為工作需求,要在一個OA系統嵌入頁面,查詢相關OA系統的jquery版本,是1.4.4,版本過低,沒辦法引用現有的優秀的下拉搜尋框的框架,導致需要自己寫一個簡易的下拉搜尋框。程式碼如下,親測,有效:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        ul#drop {
            list-style: none;
            margin: 0;
            padding: 0;
        }
        ul#drop li {
            
            margin: 0;
            padding: 10px;
        }

        ul#drop li:hover {
            background-color: darkgrey;
			width:200px;
        }

        p#selectedId {
            display: inline-block;
        }

    </style>

    <script>

        // 臨時資料

        var data1 = ["1d412155279b4c0b90571991f8e37cde", "17173(17173)"];
        var data2 = ["f02d045ed089432cb9bc84c89780416a", "AXIS(系統研發)"];
        var data = [data1, data2];

        // 頁面載入完成
        window.onload = function (evg) {
            // 獲取div
            var search = document.getElementById("search");
            // 獲取輸入框元素
            var searchText = document.getElementById("searchText");
            // 獲取顯示id的p元素
            var selectedId = document.getElementById("selectedId");

            // 新增獲取焦點事件
            searchText.onfocus = function () {

                var drop = document.getElementById("drop");

                if (!drop) {
                    // 初始下拉列表
                    var originalUl = document.createElement("ul");
                    originalUl.id = "drop";

                    data.forEach(function (element) {
                        // 建立li
                        var li = document.createElement("li");
                        li.innerHTML = element[1];
                        li.title = element[0];
                        // 新增點選事件
                        li.onclick = function () {
                            searchText.value = this.innerHTML;
                            searchText.name = this.title;
//                            alert(this.title);
                            selectedId.innerHTML = "id: " + searchText.name;
                            // 搜尋
                        };
                        originalUl.appendChild(li);
                    });
                    search.appendChild(originalUl);
                }

            };
            // 新增鍵盤事件
            searchText.onkeyup = function () {
                // 先刪除
                var drop = document.getElementById("drop");
                search.removeChild(drop);

                // 建立ul
                var ul = document.createElement("ul");
                ul.id = "drop";
                // 新增ul
                search.appendChild(ul);

                // 遍歷陣列匹配資料

                data.forEach(function (element) {
                    if (element[1].search(searchText.value) != -1) {
                        // 建立li
                        var li = document.createElement("li");
                        li.innerHTML = element[1];
                        li.title = element[0];
                        // 新增點選事件
                        li.onclick = function () {
                            searchText.value = this.innerHTML;
                            // 搜尋
                            searchText.name = this.title;
                            alert(this.title);
                            selectedId.innerHTML = "id: " + searchText.name;
                        };
                        ul.appendChild(li);
                    }
                });
            };

            if (search.addEventListener) {
                search.addEventListener("click", function (evg) {
                    evg.stopPropagation();
                })
            } else if (search.attachEvent) {
                search.attachEvent("click", function (evg) {
                    evg.cancelBubble = true;
                })
            }


            
            // 新增文件點選事件

            document.onclick = function () {
                var drop = document.getElementById("drop");
                search.removeChild(drop);
            };
        };
    </script>
</head>
<body>
<div id="search">
    <form action="">
        <input type="text" id="searchText">
        <input type="submit" id="searchButton" value="搜尋">
        <p id="selectedId"></p>
    </form>
</div>
</body>
</html>


補充:

在IE瀏覽器下,不支援forearch語句,可以自己改成for.同時我找了一段程式碼,解決了IE不支援forearch語句,估計是重寫了forearch。我們可以在使用forearch之前加上如下程式碼:

if ( !Array.prototype.forEach ) {

                	  Array.prototype.forEach = function forEach( callback, thisArg ) {

                	    var T, k;

                	    if ( this == null ) {
                	      throw new TypeError( "this is null or not defined" );
                	    }
                	    var O = Object(this);
                	    var len = O.length >>> 0; 
                	    if ( typeof callback !== "function" ) {
                	      throw new TypeError( callback + " is not a function" );
                	    }
                	    if ( arguments.length > 1 ) {
                	      T = thisArg;
                	    }
                	    k = 0;

                	    while( k < len ) {

                	      var kValue;
                	      if ( k in O ) {

                	        kValue = O[ k ];
                	        callback.call( T, kValue, k, O );
                	      }
                	      k++;
                	    }
                	  };
                	}

相關推薦

JS編寫input搜尋類似搜尋

因為工作需求,要在一個OA系統嵌入頁面,查詢相關OA系統的jquery版本,是1.4.4,版本過低,沒辦法引用現有的優秀的下拉搜尋框的框架,導致需要自己寫一個簡易的下拉搜尋框。程式碼如下,親測,有效: <!DOCTYPE html> <html lang

div展示聯動js二級聯動城市選擇

// 省份城市的聯動 var oC=document.getElementsByClassName('oc'); var oCity=document.getElementById('oCity'); var city = [];//申明   //定義二級資料 city[0] = ['

Struts2中的ognl標籤介紹(property標籤、iterator標籤、if/elseif/else標籤、url標籤、url標籤、radio單選、select選擇

Struts2中的ognl標籤介紹(property標籤、iterator標籤、if/elseif/else標籤、url標籤、url標籤、radio單選框、select下拉選擇框) property標籤用於輸出指定值: <s:set name="name" value="'kk'" /> &l

Html頁面中select列表別樣用法一個方法一勞永逸。

select 異步加載很多時候,我們寫from表單面,給select標簽賦值,都采用這種方式:1.MVC中設創建公共的分部視圖;2.直接在前臺面中,插入片段後臺代碼;今天我利用HTML5中的自定義屬性,結合JQ擴展方法,寫一個通用的JS方法,JS代碼如下: $.fn.SetSelect = funct

小程序選擇地區省市區

六盤水 泉州 ive 石家莊市 玉溪 廣州 ali XML 安徽省 下拉的地址選擇: wxml: <view style=‘height:84rpx;background:#fff;border-bottom:1rpx solid #dfdbdc;line-heig

jqgrid 表格中篩選條件的多選樹形 ;文本清除插件;高級查詢多條件動態篩選插件

this break eset real 分割線 EDA color ctx 篩選條件 /** * @@desc 文本框清除按鈕,如果isAutoWrap為false當前文本框父級必須是relative定位,boostrap參考input-group

微信小程序的按擡起事件選擇的事件及點擊確定的方法函數獲取時間的方法省市區的方法。

bin img util req fun data hang UNC 日期 擡起按下的事件: 擡起事件: bind:touchstart="nanOne" 把這條屬性放到標簽裏就可以了 在JS中 nanOne: function () {     this.setDa

白鷺引擎製作滾動類似div的oveflow

白鷺引擎 版本:5.2.8 描述:白鷺引擎製作滾動框,類似div的overflow 程式碼片段 var content:egret.TextField = new egret.TextField; content.text = "今天天氣很好,可

【Html】Clipboard.js 實現點選複製板操作

可以使用cdn 或者直接下載 設定好引用路徑(百度雲下載) <script type="text/javascript" src="./dist/clipboard.min.js"></script> html <input type

input + div 選擇

前臺html頁面 <html> <head> <meta name="viewport" content="width=device-width" /> <title>showOptions</title> &l

input-palceholder的預設字型顏色及select去掉三角按鈕 置換元素有哪些?

1.select去掉三角按鈕 /* 去掉select右邊的三角形 */ -webkit-appearance: none; 2改變預設字型顏色 :-moz-placeholder { color: #a9a9a9; }       &nb

jqGrid----列表聯動dataEvents回撥函式。

1.給單元格添onchange事件 例項: $('#gridYosan').setColProp('yosanka', {editoptions: { dataEvents:[{ type: 'change', fn: fun

Vue-multiselect 外掛使用--搜尋及單選

參考官網:https://vue-multiselect.js.org/#sub-select-with-search 1.通過npm安裝vue-multiselect npm install vue-multiselect 2.引用 template中:注意這裡的track-by

初始化表單(保留搜尋提交之後預設值的方法)

做的專案某頁面需要有一個搜尋,希望在我選擇下拉選框的某個值提交,返回結果之後,之前提交的值預設selected。 html程式碼如下: <form class="well form-inline margin-top-20" id="form" meth

關於layui 兩層彈 關閉一個後重新整理上一個彈的某個問題

(我使用的layui版本為2.4.3) 最近因為專案需要,需要實現一層彈框(下面稱之為A彈框)後,點選按鈕跳出二層彈框(下面稱中國之為B彈框),可以實現新增新的下拉框值,然後再關閉B彈框是,可以實現區域性重新整理A彈框中的部分塊,使得剛新增的值顯示,但是不能是整

js解決列表互斥選項的問題

png hand 問題 列表框 下拉 inf 判斷 要去 發生 如圖不區分選項與其他選項是互斥的關系,當選擇了不區分時,其他選項就要去除,當有其他選項存在時,就不能有不區分 解決辦法:定義change事件,若列表發生改變,首先判斷點擊的是否是不區分,若是,則將其他選項剪切

freemaker中下(動態和靜態)的塞值回顯

靜態下拉,靜態的情況下把所有靜態的可能都列出來,判斷返回的值是否等於option中的值,如果相等就顯示那行,??是判斷不為空: <label class="control-label">所在端:</label>

類似ios select選擇的實現

select下拉選擇標籤在移動端是很常用的,但是不同的瀏覽器展示的效果都不一樣,其中iOS中的效果還是令人比較滿意的,所以產品設計往往給出這樣的一種設計。。百度中這種外掛也比較多,比較複雜,最近整理了一下。 實現效果: 原理: 1。定義每行的高度是40

解決:JS向後臺傳參IE中文未編碼問題

1.問題描述    專案中用jQuery向後臺URL傳參獲取資料時,google瀏覽器正常執行,但IE沒有資料返回。js程式碼如下: jsonurl = urlPreffix +"getInfoByCity.do?city="+$j("#city").val(); $j.

表單測試-單選按鈕、複選列表搜尋填充域驗證點

1.單選按鈕測試常見驗證點 單選按鈕常在註冊新使用者選擇性別處用到,單選按鈕測試常見驗證點如下: 1.一組單選按鈕不能同時選中,只能選中一個 2.逐一執行每個單選按鈕的功能。分別選擇“男”、“女”後,儲存到資料庫的資料應該分別為“男”、“女”。 3.一組執行同一個功能