<HTML>
<HEAD>
<TITLE>AutoComplete</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<SCRIPT LANGUAGE="JavaScript">...
<!--

/**//**
** ==================================================================================================
** ClassName :CLASS_AUTOCOMPLETE
** Intro :a control similar IE Address Bar
** Example :
Ver : 0.31
---------------------------------------------------------------------------------------------------
nick:<INPUT size=30 name=q autolist='ba|ttyp|"|tt|typ|中国上海市|www.baidu.com|www.google.con|jimao8|中国|中|中国上海'>
<SCRIPT LANGUAGE="JavaScript">
<!--
var acbar = new CLASS_AUOTCOMPLETE();
acbar.setup(document.all.q);
//-->
< /SCRIPT>
---------------------------------------------------------------------------------------------------
** Author :ttyp
** Email :ttyp@21cn.com
** Date :2006-12-25
** ==================================================================================================
**/

function CLASS_AUOTCOMPLETE(ID)...{
var me = this;
this.contain = document.getElementById("__auto_complete_contain");
this.handle = null;
this.dropdown = false;
this.stopChange = false;
this.line = 0;
this.selectIndex = -1;
this.id = "";

if(ID!=null&&typeof(ID)!=undefined)...{
this.id = ID;
}else...{
this.id = getNewId();
}

function getNewId()...{
return "ID_" + Math.random().toString().substring(2)
}

this.add = function(s)...{
this.list[this.list.length] = s;
}

this.sort = function()...{
//sort
shellSort(this.list);
}

this.show = function(flag)...{
var contain = me.contain; 
if(contain==null||typeof(contain)=="undefined")...{
contain = document.createElement("div");
var body = document.body;
if(typeof(body)!="undefined")...{
body.appendChild(contain);
}
me.contain = contain;
}
if(flag==undefined||flag==null)...{
flag = true;
}

if(flag)...{
var w=1000,h=50,l,t;
me.line = 0;
if(me.handle!=null&&typeof(me.handle)!="undefined")...{
var v = me.handle.value;
if(me.list!=null&&typeof(me.list)!="undefined")...{
for(var i=contain.childNodes.length-1;i>=0;i--)...{
contain.removeChild(contain.childNodes[i]);
}
var index = 0;
for(var i=0;i<me.list.length;i++)...{
if(me.list[i].indexOf(v)==0)...{
var oo = document.createElement("div");
contain.appendChild(oo);
oo.innerText = me.list[i];
oo.style.height = "16px";
oo.style.width = "100%";
oo.style.overflow="hidden";
oo.style.lineHeight="120%";
oo.style.cursor = "hand";
oo.style.fontSize = "9pt";
oo.style.padding = "0 2 0 2";
oo.setAttribute("accoc",me.id + "__auto_complete_contain");
oo.setAttribute("sIndex",index);
oo.onmouseover = function()...{
this.style.background = "highlight";
this.style.color = "highlighttext";
if(me.selectIndex>=0&&me.selectIndex!=this.getAttribute("sIndex")*1)...{
var oc = me.contain.childNodes[me.selectIndex];
oc.style.background = "#ffffff";
oc.style.color = "#000000";
}
me.selectIndex = this.getAttribute("sIndex")*1;
}
oo.onmouseout = function()...{
this.style.background = "#ffffff";
this.style.color = "#000000";
}
oo.onclick=function()...{
me.stopChange = true;
me.handle.value = this.innerText;
me.stopChange = false;
me.show(false);
var r =me.handle.createTextRange();
r.moveStart('character',me.handle.value.length);
r.collapse(true);
r.select();
me.handle.focus();
me.selectIndex = -1;
}
oo.onfocus = function()...{ me.handle.focus();}
oo.onblur = me.handle.onblur;
oo.onselectstart = function()...{return false;};
me.line++;
index++;
}
}
}
w = me.handle.getBoundingClientRect().right - me.handle.getBoundingClientRect().left;
l = me.handle.getBoundingClientRect().left-2;
t = me.handle.getBoundingClientRect().bottom-2;
}
h = (me.line>6?6*16:me.line*16)+2;
contain.style.position = "absolute";
contain.style.top = t;
contain.style.left = l;
contain.style.width = w;
contain.style.height = h;
contain.style.overflowY = "auto";
contain.style.overflowX = "hidden";
contain.style.backgroundColor = "#ffffff";
contain.style.border = "1px solid black";
contain.setAttribute("accoc",me.id + "__auto_complete_contain");
contain.onblur = me.handle.onblur;
contain.onselectstart = function()...{return false;}
contain.onfocus = function()...{ me.handle.focus();}

if(me.line<=0)...{
contain.style.display = "none";
}else...{
contain.style.display = "";
}

}else...{
contain.style.display = "none";
}
this.dropdown = flag;
}

this.filter = function()...{
this.show();
}

this.getText = function()...{
if(me.selectIndex>=0)...{
me.handle.value = me.contain.childNodes[me.selectIndex].innerText;
me.show(false);
var r =me.handle.createTextRange();
r.moveStart('character',me.handle.value.length);
r.collapse(true);
r.select();
me.handle.focus();
me.selectIndex = -1;
}
} 

this.move = function(flag)...{
var osid = me.selectIndex;

if(me.dropdown==false)...{
me.show(true);
}
if(flag)...{
me.selectIndex++;
}else...{
me.selectIndex--;
}
if(me.selectIndex>me.contain.childNodes.length-1)...{
me.selectIndex = 0;
}
if(me.selectIndex<0)...{
me.selectIndex = me.contain.childNodes.length-1;
}

if(osid>=0)...{
var d = me.contain.childNodes[osid];
if(d!=null&&typeof(d)!="undefined")...{
d.style.background = "#ffffff";
d.style.color = "#000000";
}
}

if(me.selectIndex>=0)...{
var c = me.contain.childNodes[me.selectIndex];
if(c!=null&&typeof(c)!="undefined")...{
c.style.background = "highlight";
c.style.color = "highlighttext";
c.scrollIntoView(false);
}
}
}

this.setup = function(o)...{
this.list = o.getAttribute("autolist").split("|");
//sort
shellSort(this.list);
o.setAttribute("accoc",me.id + "__auto_complete_contain");
this.handle = o;
o.onpropertychange = function()...{
if(event.propertyName=="value")...{
if(me.stopChange==false)...{
me.filter();
}
}
}
o.ondblclick = function()...{
me.filter();
}
o.onkeydown= function()...{
switch(event.keyCode)...{
case 38://up
me.move(false);
break;
case 40://down
me.move(true);
break;
case 13:
me.getText();
break;
default:
//alert(event.keyCode);
}
}
o.onblur=function()...{
var active = document.activeElement;
var stopHide = false;

if(active!=null)...{
var ac = active.getAttribute("accoc");
if(ac!=null&&typeof(ac)!="undefined"&&ac==me.id + "__auto_complete_contain")...{
stopHide = true;
}
}
if(stopHide==false)...{
me.show(false);
}
}
}

function shellSort(arr)...{
for (var step = arr.length >> 1; step > 0; step >>= 1)...{
for (var i = 0; i < step; ++i)...{
for (var j = i + step; j < arr.length; j += step)...{
var k = j, value = arr[j];
while (k >= step && arr[k - step] > value)...{
arr[k] = arr[k - step];
k -= step;
}
arr[k] = value;
}
}
}
}
}
//-->
</SCRIPT>
<BODY>
nick:<INPUT size=30 name=q autolist='ba|ttyp|"|tt|typ|中国上海市|jimao8|中国|中|中国上海'>
addr:<INPUT size=30 name=p autolist='www.baidu.com|www.google.con|www.cnblogs.com/ttyp'>
<SCRIPT LANGUAGE="JavaScript">...
<!--
var acbar1 = new CLASS_AUOTCOMPLETE();
acbar1.setup(document.all.q);
acbar1.add("hello");
acbar1.sort();
var acbar2 = new CLASS_AUOTCOMPLETE();
acbar2.setup(document.all.p);
//-->
</SCRIPT>
</BODY>
</HTML>

被折叠的 条评论
为什么被折叠?



