http://blog.sina.com.cn/yangsq[订阅]
字体大小: 正文
利用ajax实现自动完成(中文版)(2006-12-26 16:07:16)
   自从google suggest利用了自动完成以后,这项功能的流行已经成为web开发的时尚,当然这也是一项很酷的功能。
   网上关于自动完成的论述也不少,但在利用一项技术时中文问题是一定要考虑的,但网上这方面的例子或说明很少,下面我完整介绍一个demo,把自动完成和中文问题结合。
 
还是先看效果图
 
当我输入“苹”时,会自动显示一个下来框,把服务器端匹配的结果返回。
 
是不是很不错,下面我来详细说明一下他的开发过程
 
(1)jsp页面
这是body部分
 
 
它包含一个输入框,定义了一个键盘事件,当按键抬起时触发findNames()(呆会介绍)。还有一个相对的table,用于下拉显示。
 
好了,该看最主要的部分了
 
 
以上代码我不想说明,了解ajax的对它再熟悉不过了。
 
这就是键盘触发调用事件,也没什么特别的,但要说明的是if判断里的
escape(inputField.value).indexOf("%")!=-1
当输入是中文时(即inputField.value的值),值自动国际化了(如“%u1234”),所以不能再以简单的按一个键就触发一次来衡量了。
 
 
这个没什么说的,接下来主要介绍的是setNames()这个函数。
 
 
 
这个函数根据返回值来生成下拉框,并定义了一些下拉框中项的触发动作,即当点击下拉框中的一项时要把它填充到文本框中(populateName函数)。
 
这段代码我就不多说了,是设置下拉框位置的。
 
这是清除下拉框的。
 
好了,jsp页面部分介绍完毕
 
(2) servlet部分
 
在url中定义了请求路径(autoCompleteServlet?)
在web.xml中要为这个路径定义一个servlet类,这里省略web.xml的说明。
 
这个类也没什么特别的,但要说的是AjaxDecode类和NameService类
AjaxDecode类是专门进行编码转换的,在servlet中用到的是
String getUrlParameter(HttpServletRequest request,String targetstr)这个函数,第一个参数是request,第二个参数是要转换的键。代码如下:
 
 
 
NameServie类是自己定义的一个类,提供了输入文本的匹配,反回匹配的list。下面是这个类的代码:
 
 
 
 
 
 
 
  • 评论加载中,请稍候...
发评论    明星私家相册

验证码:看不清楚数字吗?点击这里再试试。收听验证码

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

相关博文
读取中...
推荐博文
读取中...