JS實現自動提示框匹配查詢


本文介紹一下仿百度搜索框,當對輸入框鍵入文字時,自動彈出建議選項並匹配。

效果如下:

 

OK,首先,建個輸入框哈

 1 <!DOCTYPE html>
 2 <html>
 3 <meta charset="utf-8">
 4 <head>
 5      <title>自動搜索</title>
 6 </head>
 7 <body>
 8     自動搜索框 <input type="text" id="input" onkeyup="find()">
 9     <div style="position:absolute;" id="popup">
10         <table id="table" border="0" cellspacing="0" cellpadding="0">        
11             <tbody id="table_body"></tbody>
12         </table>
13     </div>
14 </body>
15 </html>

 

當輸入框有輸入動作時即調用find函數。find函數主要是搜索對應的相關建議項,此處用的最簡單的方法:包含輸入內容的數據項即為符合的建議項。

具體實現如下:

 1 function find() {
 2 
 3     inputField = document.getElementById("input");
 4 
 5     for (var i = 0; i < data.length; i++) {
 6           if ((data[i]).indexOf(inputField.value)>=0){
 7                arr.push(data[i]);
 8           }
 9      }
10  
11     set(arr);
12 }

 

現在來到set 函數,其主要功能是將符合的建議項逐條放置於彈出框中。具體實現如下:

 1 function set(arr) {            
 2 
 3     var size = arr.length;
 4     setOffsets();
 5 
 6     var row, cell, txtNode;
 7     for (var i = 0; i < size; i++) {
 8         var nextNode = arr[i];
 9         row = document.createElement("tr");
10         cell = document.createElement("td");
11         
12         cell.onmouseout = function() {this.className='mouseOver';};
13         cell.onmouseover = function() {this.className='mouseOut';};//鼠標懸停或離開選項時顏色變化
14         cell.setAttribute("bgcolor", "#FFFAFA");
15         cell.setAttribute("border", "0");
16         cell.onclick = function() { populate(this); } ;  //鼠標點擊選項給輸入框賦值                           
17 
18         txtNode = document.createTextNode(nextNode);
19         cell.appendChild(txtNode);
20         row.appendChild(cell);
21         TableBody.appendChild(row);
22     }
23 }


此處又引用了兩個函數。setOffsets主要是設置彈出框的位置。populate 是當鼠標點擊選項時將值賦給輸入框。

setOffsets 實現如下:

 1 function setOffsets() {
 2     var end = inputField.offsetWidth;
 3     var left = calculateOffsetLeft(inputField);
 4     var top = calculateOffsetTop(inputField) + inputField.offsetHeight;
 5 
 6     completeDiv.style.border = "black 1px solid";
 7     completeDiv.style.left = left + "px";
 8     completeDiv.style.top = top + "px";
 9     Table.style.width = end + "px";
10 }
11 
12 function calculateOffsetLeft(field) {
13   return calculateOffset(field, "offsetLeft");
14 }
15 
16 function calculateOffsetTop(field) {
17   return calculateOffset(field, "offsetTop");
18 }
19 
20 function calculateOffset(field, attr) {
21   var offset = 0;
22   while(field) {
23     offset += field[attr]; 
24     field = field.offsetParent;
25   }
26   return offset;
27 }

populate 實現如下:

1 function populate(cell) {//點擊為文本框賦值
2     inputField.value = cell.firstChild.nodeValue;
3     clearNames();
4 }


為文本框賦值后需消除彈出框中的建議,於是調用clear 函數。具體實現如下:

1 function clear() {    
2     if(TableBody){
3          var ind = TableBody.childNodes.length;
4          for (var i = ind - 1; i >= 0 ; i--) {
5              TableBody.removeChild(TableBody.childNodes[i]);
6          }
7          completeDiv.style.border = "none";
8     }
9 }

 

Ok,到這里JS功能實現就完成了。下面設定一下鼠標滑過建議項時的顏色變化:

1 .mouseOut {
2     background: #708090;
3     color: #FFFAFA;
4     }
5 
6 .mouseOver {
7     background: #FFFAFA;
8     color: #000000;
9 }


另:如需中文搜索,在find 函數中加入正則表達式判斷即可。

 

本文完。

歡迎大家交流指正!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM