大概是这样:<script language="javascript">
var intIndex=0;
arrList = ["abc", "efg", "hij", "abs", "function", "delete", "clear", "hello", "world", "zswang"];
arrList1 = ["123", "456", "789", "886", "784", "010", "1311234567"];
window.onload = function() {
smanPromptList(arrList, "en");
smanPromptList(arrList1, "num");
}
    
document.write("<div id='__smanDisp' style='position:absolute;display:none;height:30px;background:#E8F7EB;border: 1px solid #CCCCCC;font-size:14px;cursor: default;' onbulr> </div>");
document.write("<style>.sman_selectedStyle{background-Color:#102681;color:#FFFFFF;}</style>");function smanPromptList(arrList, objInputId) {
if (arrList.constructor != Array) {
alert('smanPromptList初始化失败:第一个参数非数组!');
return;
}
arrList.sort(function(a, b) {
if(a.length > b.length) return 1;
else if (a.length == b.length) return a.localeCompare(b);
else return -1;
});
var objouter = document.getElementById("__smanDisp") //显示的DIV对象
var objInput = document.getElementById(objInputId); //文本框对象
var selectedIndex = -1;
var intTmp; //循环用的:)
if (objInput == null) {
alert('smanPromptList初始化失败:没有找到"' + objInputId + '"文本框');
return;
}
//文本框失去焦点
objInput.onblur = function() {
objouter.style.display = 'none';
}
//文本框按键抬起
objInput.onkeyup = checkKeyCode;
//文本框得到焦点
objInput.onfocus = checkAndShow;
function checkKeyCode() {
var ie = !!document.all;
if (ie) {
var keyCode = event.keyCode
if (keyCode == 40 || keyCode == 38) { //下上
chageSelection(keyCode == 40)
} else if (keyCode == 13) { //回车
outSelection(selectedIndex);
}else {
checkAndShow();
}
} else {
checkAndShow();
}
divPosition();
} function checkAndShow() {
var strInput = objInput.value
if (strInput != "") {
divPosition();
selectedIndex = -1;
objouter.innerHTML = "";
for (intTmp = 0; intTmp < arrList.length; intTmp++) {
for (i = 0; i < arrList[intTmp].length; i++) {
if (arrList[intTmp].substr(i, strInput.length).toUpperCase() == strInput.toUpperCase()) {
addOption(arrList[intTmp], strInput);
break; // zswang insert
}
}
}
objouter.style.display = '';
} else {
objouter.style.display = 'none';
}

function addOption(value, keyw) {
var v = value.replace(keyw, "<b><font color=red>" + keyw + "</font></b>");
objouter.innerHTML += "<div onmouseover=\"this.className='sman_selectedStyle'\" onmouseout=\"this.className=''\" onmousedown=\"document.getElementById('" + 
objInputId + "').value='" + value + "'\">" + v + "</div>"
}
}

function chageSelection(isUp) {
if (objouter.style.display == 'none') {
objouter.style.display = '';
} else {
if (isUp)
selectedIndex++;
else selectedIndex--;
}
var maxIndex = objouter.children.length - 1;
if (selectedIndex < 0) selectedIndex = 0;
if (selectedIndex > maxIndex) selectedIndex = maxIndex;
for (intTmp = 0; intTmp <= maxIndex; intTmp++) {
if (intTmp == selectedIndex) {
objouter.children[intTmp].className = "sman_selectedStyle";
} else {
objouter.children[intTmp].className = "";
}
}
}
function outSelection(Index) {
objInput.value = objouter.children[Index].innerText;
objouter.style.display = 'none';
}

function divPosition() {
objouter.style.top = getAbsoluteHeight(objInput) + getAbsoluteTop(objInput);
objouter.style.left = getAbsoluteLeft(objInput);
objouter.style.width = getAbsoluteWidth(objInput);
}
}function getAbsoluteHeight(ob){
return ob.offsetHeight
}function getAbsoluteWidth(ob){
return ob.offsetWidth
}function getAbsoluteLeft(ob){
var s_el = 0;
el = ob;
while (el) {
s_el = s_el + el.offsetLeft;
el = el.offsetParent;
}
return s_el;
}function getAbsoluteTop(ob) {
var s_el = 0;
el = ob;
while (el) {
s_el = s_el + el.offsetTop;
el = el.offsetParent;
}
return s_el;
}</script>
<input name="en" type="text" id="en" />
<input name="num" type="text" id="num" />
不用太感谢我。

解决方案 »

  1.   

    呵呵~
    还是要感谢你哦~
    不过这2个数组我要动态在数据库里读取啊

    arrList = ["abc", "efg", "hij", "abs", "function", "delete", "clear", "hello", "world", "zswang"];
    arrList1 = ["123", "456", "789", "886", "784", "010", "1311234567"];
    这样的格式我不知道怎么循环哦~xixi
    原来用的是这样的

    var intIndex=0;
    arrList = new Array();
    <%Set rs = Server.CreateObject ("ADODB.Recordset")
    sql = "select * from [table1] where typ='1'"
    rs.Open sql,conn,1,1
    if rs.EOF and rs.BOF then
    else
    do while not rs.eof%>
    arrList[intIndex++] = "<%=rs("num")%>|<%=rs("names")%>";
    <%
    rs.MoveNext
    Loop
    end if%>var intIndex1=0;
    arrList1 = new Array();
    <%Set rs = Server.CreateObject ("ADODB.Recordset")
    sql = "select * from [table2] where typ='2'"
    rs.Open sql,conn,1,1
    if rs.EOF and rs.BOF thenelse
    do while not rs.eof%>
    arrList1[intIndex1++] = "<%=rs("Num")%>|<%=rs("Names")%>";
    <%
    rs.MoveNext
    Loop
    end if%>
      

  2.   

    但是用我原来的代码的那个形式的数组就不显示哦,只显示第二个输入框
    zswang的代码可以显示,但是我不会用循环哦,~
      

  3.   

    var intIndex=0;
    arrList = new Array();arrList[intIndex++] = "abc";
    arrList[intIndex++] = "efg";
    arrList[intIndex++] = "hij";
    ------
    arrList = ["abc", "efg", "hij"];两种写法是一样的。关键的地方是:一个window对象只能赋值一个onload事件
    原来的代码:
    smanPromptList(arrList,"en");
    smanPromptList(arrList1,"num");
    会覆盖掉前面复制的onload事件。动手测试再说吧。
      

  4.   

    恩,这个我测试了,可以用的,谢谢你,
    但是我的问题就是

    arrList1 = ["123", "456", "789", "886", "784", "010", "1311234567"]; 
    如果是这样的数组,我用asp不会写循环赋值
    如果是下面这样的倒是好赋值了,上面这样的我就不会了,不知道怎么能放到一起,把“123”“456”按照你的形式给赋值(arrList1 = ["123", "456", "789", "886", "784", "010", "1311234567"]; )

    var intIndex1=0;
    arrList1 = new Array();
    <%Set rs = Server.CreateObject ("ADODB.Recordset")
    sql = "select * from [table2] where typ='2'"
    rs.Open sql,conn,1,1
    if rs.EOF and rs.BOF thenelse
    do while not rs.eof%>
    arrList1[intIndex1++] = " <%=rs("Num")%>| <%=rs("Names")%>";
    <%
    rs.MoveNext
    Loop
    end if%>
      

  5.   

    明白了,愚钝了,笨死了,笨死了,
    谢谢zswang,