演示
 定义 tipSrc 数据源 (XML文件) tipLen 列表框长度 (数字) inputCase 大小写 ("upper"或者"lower")
示例 <input type="text" name="textfield" style="behavior:url('htc/tip.htc')" tipSrc="vslnm.php" tipLen="15" inputCase="upper">
HTC文件 <!-- --------------------------------------------------------------------- // // File: tip.htc // version: 1.0 // Description:下拉列表提示. // author: 伍维波 // //------------------------------------------------------------------------> <PUBLIC:COMPONENT id="tip" urn="wwb:tip"> <PUBLIC:PROPERTY name="tipSrc" /> //数据源,XML文件 <PUBLIC:PROPERTY name="tipLen" /> //列表框长度 <PUBLIC:PROPERTY name="inputCase" /> //大小写 <PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="init()" /> <PUBLIC:ATTACH EVENT="onkeydown" ONEVENT="enterTip()" /> <PUBLIC:ATTACH EVENT="onkeyup" ONEVENT="showTip()" /> <script language="JavaScript">
var list=new Array(); //数据列表 var oInput; //目标对象 var oSelect; //列表框对象 var oDiv; //定位对象
/***初始化***/ function init() { loadData(); //alert(element.name); ele=element; oInput=ele; oDiv=document.createElement("DIV"); var top = ele.offsetTop; var left = ele.offsetLeft; var width = ele.offsetWidth; var height = ele.offsetHeight; while(ele = ele.offsetParent) { top += ele.offsetTop; left += ele.offsetLeft; } top = top + height; oDiv.style.position="absolute"; //alert(left+"="+top); oDiv.style.left=left; oDiv.style.top=top; oDiv.style.visibility="hidden"; //alert(left); //alert(top); oSelect=document.createElement("SELECT"); if(tipSrc!=null&&tipSrc!="") { oSelect.size=tipLen; } else { oSelect.size=10; } oSelect.onchange=function() { oInput.value=this.value; } oSelect.attachEvent("onkeydown",changeTip); oSelect.attachEvent("onclick",selectTip); oInput.insertAdjacentElement( "AfterEnd", oDiv); oDiv.insertAdjacentElement("AfterBegin",oSelect); return true; } /***装载数据***/ function loadData() { if(tipSrc!=null&&tipSrc!="") { var xmldom = new ActiveXObject('Microsoft.XMLDOM'); xmldom.async = false; //alert(tipSrc); xmldom.load(tipSrc); root = xmldom.documentElement; temp=root.selectNodes("//OPTION");
for(var i=0;i<temp.length;i++) { list[i] = temp[i].text; } return true; } else return false; } /***显示列表提示框***/ function showTip() { //alert("KEYUP"); event.cancelBubble=true; ele=event.srcElement; if(inputCase!=null&&inputCase=="upper") oInput.value = oInput.value.toUpperCase(); else if(inputCase!=null&&inputCase=="lower") oInput.value = oInput.value.toLowerCase(); input=ele.value; if(input==oSelect.value) { hideTip(); return true; } clear(); for(i=0;i<list.length;i++) { if(list[i].indexOf(input)==0) { oSelect.add(new Option(list[i],list[i])); } } /* for(var i=0;i<list.length;i++) { var oOption=document.createElement("OPTION"); oOption.text = list[i]; oSelect.options.add(oOption); } */ //ele.insertAdjacentElement( "AfterEnd", oDiv); //oDiv.insertAdjacentElement("AfterBegin",oSelect); oDiv.style.visibility="visible"; oSelect.selectedIndex=0; return true; } /***按键操作***/ function enterTip() { //alert("KEYDOWN"); //alert(oInput); kc=event.keyCode; if(oDiv.style.visibility!="hidden") { if(kc==13) { selectTip(); } else if(kc==40) { oSelect.focus(); } } } /***改变列表项***/ function changeTip() { kc=event.keyCode; if(oDiv.style.visibility!="hidden") { if(kc==13) { selectTip(); } if(kc==40) { oInput.value=oSelect.value; } } } /***选择列表项***/ function selectTip() { oInput.value=oSelect.value; oInput.focus(); hideTip(); } /***隐藏列表提示框***/ function hideTip() { oDiv.style.visibility = "hidden"; } /***删除列表项***/ function clear() { for(var i=oSelect.options.length-1;i>=0;i--) { oSelect.options.remove(i) } } </script> </PUBLIC:COMPONENT>
数据源 XML文件的格式如下 <?xml version="1.0" encoding="GB2312"?> <LIST> <OPTION>208</OPTION> <OPTION>207</OPTION> <OPTION>206</OPTION> <OPTION>205</OPTION> <OPTION>204</OPTION> <OPTION>203</OPTION> <OPTION>202</OPTION> <OPTION>201</OPTION> <OPTION>200</OPTION> <OPTION>199</OPTION> </LIST>
也可以用PHP来生成XML的示例 <?php header("Content-type: text/xml"); echo '<?xml version="1.0" encoding="GB2312"?>'; require_once("../lib/quotation.php"); $Quotation=new Quotation(); $Str=$Quotation->createVslNm(); echo $Str; ?> 
|