1. 程式人生 > >js自動補全

js自動補全

one cxf cnblogs 重復 auto object chang del .get

<!doctype html>
<html>
<style>
body {
    margin-left: 0px;
    margin-top: 0px;
    margin-right: 0px;
    margin-bottom: 0px;
}

.auto_hidden {
    width: 204px;
    border-top: 1px solid #333;
    border-bottom: 1px solid #333;
    border-left: 1px solid #333;
    border-right: 1px solid #333
; position: absolute; display: none; } .auto_show { width: 204px; border-top: 1px solid #333; border-bottom: 1px solid #333; border-left: 1px solid #333; border-right: 1px solid #333; position: absolute; z-index: 9999; /* 設置對象的層疊順序 */ display: block; } .auto_onmouseover
{ color: #ffffff; background-color: highlight; width: 100%; } .auto_onmouseout { color: #000000; width: 100%; background-color: #ffffff; } </style> <script language="javascript"> <!-- var $ = function(id) { return "string" == typeof id ? document.getElementById(id) : id; }
var Bind = function(object, fun) { return function() { return fun.apply(object, arguments); } } function AutoComplete(obj, autoObj, arr) { this.obj = $(obj); //輸入框 this.autoObj = $(autoObj);//DIV的根節點 this.value_arr = arr; //不要包含重復值 this.index = -1; //當前選中的DIV的索引 this.search_value = ""; //保存當前搜索的字符 } AutoComplete.prototype = { //初始化DIV的位置 init : function() { this.autoObj.style.left = this.obj.offsetLeft + "px"; this.autoObj.style.top = this.obj.offsetTop + this.obj.offsetHeight + "px"; this.autoObj.style.width = this.obj.offsetWidth - 2 + "px";//減去邊框的長度2px }, //刪除自動完成需要的所有DIV deleteDIV : function() { while (this.autoObj.hasChildNodes()) { this.autoObj.removeChild(this.autoObj.firstChild); } this.autoObj.className = "auto_hidden"; }, //設置值 setValue : function(_this) { return function() { _this.obj.value = this.seq; _this.autoObj.className = "auto_hidden"; } }, //模擬鼠標移動至DIV時,DIV高亮 autoOnmouseover : function(_this, _div_index) { return function() { _this.index = _div_index; var length = _this.autoObj.children.length; for ( var j = 0; j < length; j++) { if (j != _this.index) { _this.autoObj.childNodes[j].className = auto_onmouseout; } else { _this.autoObj.childNodes[j].className = auto_onmouseover; } } } }, //更改classname changeClassname : function(length) { for ( var i = 0; i < length; i++) { if (i != this.index) { this.autoObj.childNodes[i].className = auto_onmouseout; } else { this.autoObj.childNodes[i].className = auto_onmouseover; this.obj.value = this.autoObj.childNodes[i].seq; } } }, //響應鍵盤 pressKey : function(event) { var length = this.autoObj.children.length; //光標鍵"↓" if (event.keyCode == 40) { ++this.index; if (this.index > length) { this.index = 0; } else if (this.index == length) { this.obj.value = this.search_value; } this.changeClassname(length); } //光標鍵"↑" else if (event.keyCode == 38) { this.index--; if (this.index < -1) { this.index = length - 1; } else if (this.index == -1) { this.obj.value = this.search_value; } this.changeClassname(length); } //回車鍵 else if (event.keyCode == 13) { this.autoObj.className = "auto_hidden"; this.index = -1; } else { this.index = -1; } }, //程序入口 start : function(event) { if (event.keyCode != 13 && event.keyCode != 38 && event.keyCode != 40) { this.init(); this.deleteDIV(); this.search_value = this.obj.value; var valueArr = this.value_arr; valueArr.sort(); if (this.obj.value.replace(/(^\s*)|(\s*$)/g, ‘‘) == "") { return; }//值為空,退出 try { var reg = new RegExp("(" + this.obj.value + ")", "i"); } catch (e) { return; } var div_index = 0;//記錄創建的DIV的索引 for ( var i = 0; i < valueArr.length; i++) { if (reg.test(valueArr[i])) { var div = document.createElement("div"); div.className = "auto_onmouseout"; div.seq = valueArr[i]; div.onclick = this.setValue(this); div.onmouseover = this.autoOnmouseover(this, div_index); div.innerHTML = valueArr[i].replace(reg, "<strong>$1</strong>");//搜索到的字符粗體顯示 this.autoObj.appendChild(div); this.autoObj.className = "auto_show"; div_index++; } } } this.pressKey(event); window.onresize = Bind(this, function() { this.init(); }); } } //--> </SCRIPT> <body> <h1 align="center">自動完成函數(Autocomplete Function)</h1> <div align="center"> <input type="text" style="width: 300px; height: 20px; font-size: 14pt;" id="o" onkeyup="autoComplete.start(event)"> </div> <div class="auto_hidden" id="auto"> <!--自動完成 DIV--> </div> <script> var autoComplete = new AutoComplete(o, auto, [ b0, b12, b22, b3, b4, b5, b6, b7, b8, b2, abd, ab, acd, accd, b1, cd, ccd, cbcv, cxf ]); </SCRIPT> </body> </html>

;

js自動補全