采用xml,xsl,js,xmldom编写.兼容ie和firefox浏览器.

效果如以下网址:

http://www.vcsale.com/cheap.Final_Fantasy_XI.3.aspx

 

1.首先,一个简单的js类.

文本框+层模拟下拉框,并实现输入自动提示和过滤function inputSelection()
}

 调用说明:

a.首先您可以先通过服务器端脚本输出获得xmldocument供 inputSelection使用.

比如使用asp.net,asp,或php

也可以使用xmlhttp或xmldom直接获取数据提供页输出的xml(或字串并自己转换为xml)

本来这步操作,我可以加在 inputSelection 类里的,但是我的页面是由服务器在xslt输出html时生成的xml串,所以将获提xmldomcumnet的过程分离出来了.

 

文本框+层模拟下拉框,并实现输入自动提示和过滤          var ns4 = (document.layers) ? true : false;
文本框+层模拟下拉框,并实现输入自动提示和过滤          
var ie4 = (document.all) ? true : false;
文本框+层模拟下拉框,并实现输入自动提示和过滤          
var ServerStr="<xsl:text disable-output-escaping="yes"><![CDATA[<]]></xsl:text>root<xsl:text disable-output-escaping="yes"><![CDATA[>]]></xsl:text>";
文本框+层模拟下拉框,并实现输入自动提示和过滤          
<xsl:for-each select="//CurrentGame/Server">
文本框+层模拟下拉框,并实现输入自动提示和过滤        ServerStr 
+= "<xsl:text disable-output-escaping="yes"><![CDATA[<]]></xsl:text>Server >          }

 

b,接下来,页面上按位置摆放您的html element.

 

文本框+层模拟下拉框,并实现输入自动提示和过滤<input type="hidden" id="ServerID" value="" onchange="alert('tst');" />
文本框+层模拟下拉框,并实现输入自动提示和过滤              
<input type="hidden" id="ServerName" />
文本框+层模拟下拉框,并实现输入自动提示和过滤              
<div class="div2">
文本框+层模拟下拉框,并实现输入自动提示和过滤                
<span style=" margin:2px 0 0 15px">
文本框+层模拟下拉框,并实现输入自动提示和过滤                  
<table border="0" width="100%" id="tabContainer" cellspacing="0" cellpadding="0">
文本框+层模拟下拉框,并实现输入自动提示和过滤                    
<tr>
文本框+层模拟下拉框,并实现输入自动提示和过滤                      
<td rowspan="2" valign="top">
文本框+层模拟下拉框,并实现输入自动提示和过滤                      Select Your Server To Buy Final Fantasy XI
&nbsp;Gil</td>
文本框+层模拟下拉框,并实现输入自动提示和过滤                      
<td width="200">
文本框+层模拟下拉框,并实现输入自动提示和过滤                        
<input id="tFirstC" class="inp2" maxlength="20" style="cursor:default;" size="20" onclick="removeAll()" onkeyup="removeAll()" />
文本框+层模拟下拉框,并实现输入自动提示和过滤                      
</td>
文本框+层模拟下拉框,并实现输入自动提示和过滤                    
</tr>
文本框+层模拟下拉框,并实现输入自动提示和过滤                    
<tr>
文本框+层模拟下拉框,并实现输入自动提示和过滤                      
<td>
文本框+层模拟下拉框,并实现输入自动提示和过滤                        
<div id="divContainer" style="overflow-x:hidden;overflow-y:auto;text-align:left;line-height:150%;width:180px;height:200px;font-weight:0;font-size: 12px;color:#333333;margin: 0px;padding: 4px;z-index: 1; border-left:1px solid #336699;border-bottom:1px solid #336699;border-right:1px solid #336699;border-top:1px solid #336699;background-color: white;display:none;" />
文本框+层模拟下拉框,并实现输入自动提示和过滤                      
</td>
文本框+层模拟下拉框,并实现输入自动提示和过滤                    
</tr>
文本框+层模拟下拉框,并实现输入自动提示和过滤                  
</table>
文本框+层模拟下拉框,并实现输入自动提示和过滤                
</span>
文本框+层模拟下拉框,并实现输入自动提示和过滤              
</div>

 

c. 在上一步看到, input onkeyup时触发了removeAll方法. 实际是清除模拟select option的div.并且重新动态加载.

这与ajax有区别, 因为所需数据在页面加载时已全加载到string里,或者说又加载到了xmldom里.不需要再次到服务器端请求.

在removeAll方法里, 实例化 inputSelection,并进行初始化和进行清除及option item重建.

 

文本框+层模拟下拉框,并实现输入自动提示和过滤          function removeAll()
          }

 

d,最后一步,当页面点击其它位置时,隐藏div

 <body onclick="hideSelection(event)">

          function hideSelection(e)
          {
          var objx=document.getElementById("divContainer");
          var cobj=document.getElementById("tFirstC");
         
          var eobj= e.srcElement ? e.srcElement : e.target;
          if(eobj.id != cobj.id)
              objx.style.display="none";
          }

 

这个东西到现在用起来,还不是很方便,即移植麻烦了一点,等有空时,我把xml数据获取的部分也一起写到inputSelection里.

欢迎进行改进.和提出bug.谢谢.

相关文章: