火之无极
No war in the world!
posts - 7,  comments - 33,  trackbacks - 1

      最近根据需求做一个仿google的下拉提示控件,7月7号把写好的代码贴上了,不过会有输入中文(或者亚洲文字)的错误,现在做了相关修改,解决了不少BUG,还存在问题,希望朋友们提出,谢谢。
      给的需求是写一个控件,也就是ascx用户自定义控件。控件有两个属性,一个是数据源datatable,一个是要筛选的字段名。也就是说当你文本框中输入值后,就在数据源中查找给出的要筛选的字段,得到的信息给出下拉提示。
      考虑到一个页面可能要写多个这样的控件,所以感觉不好用document.getElementById来找到文本框对象,也没有用层隐藏的办法,取代是层的添加和删除(在这里,我的思路是这样的,如果有朋友有更好的方法,希望提出共享,学习学习,谢谢)。
      后来还因为提示数据可能过多,所以加了滚动条,同时响应解决了上下键控制滚动条的问题(真是搞人啦,那个offset和scroll看了阿一的一篇后晓得怎么算的,http://www.cnblogs.com/JustinYoung/archive/2006/10/11/offsetwidth-clientwidth.html)。

      还有自动完成的问题算个小插曲吧,其实不是大问题,丁学,玉开等都给出了答案,其实在他们给答案的时候我也找到答案了,还是谢谢他们了,大家都为园子做了这么多。不多罗嗦啦,把代码贴出来。


下面是代码:
先是建了一个用户控件Suggest.ascx
前台代码:

 

下拉提示控件 前台代码


后台代码:

 

 

下拉提示控件 后台代码

 

然后在aspx页面就可以拖这个控件来用,不过在其page_load方法中,要对控件的两个控件进行设置,不然是不会有提示框弹出的,因为数据源都没有。呵呵

效果是仿google做的,由于我才疏学浅,很多地方做的不完善。希望大家给出自己的意见和看法,给出好的批评,谢谢!

posted on 2008-07-07 11:24 火无极 阅读(1377) 评论(19)  编辑 收藏 网摘

FeedBack:
#1楼[楼主]
2008-07-07 11:33 | 火无极      
这个基本有快400行的代码,由于时间一直有点紧,没有整理页面的排版。大家看起来可能有点吃力,抱歉啦。但是还是希望大家多给些意见啦。
  回复  引用  查看    
2008-07-07 11:39 | ppff[未注册用户]
我顶
  回复  引用    
2008-07-07 12:12 | wit      
楼主真强悍,有时间写脚本

不如把时间放在解决问题上!

  回复  引用  查看    
#4楼[楼主]
2008-07-07 12:31 | 火无极      
@wit
呵呵,就是为了解决问题才写的脚本啊。你是指要用AJAX在后台取数据么?因为他们给的需求是只给出datatable数据源和要筛选的字段名,而我又不会把datatable保存在后台,然后用的时候取,所以我才用javascript写脚本啦。这位兄弟有没有好的方案,我可以学习下,谢了

  回复  引用  查看    
2008-07-07 12:47 | HNHLS99      
最好能够提供一张截图,这样让人看起来更加清晰。
  回复  引用  查看    
#6楼[楼主]
2008-07-07 14:32 | 火无极      
@HNHLS99
嗯,谢谢你的建议,有空我会做下页面的排版和布局。

  回复  引用  查看    
2008-07-07 17:34 | 陈晨      
如果要显示的字段数据量很大
一下子全都加载都客户端,会不会有问题呢?

  回复  引用  查看    
#8楼[楼主]
2008-07-08 09:17 | 火无极      
@陈晨

嗯,这个确实会。其实google只显示有10条数据,我们给的需求不一样,不过我会考虑优化。

  回复  引用  查看    
#9楼[楼主]
2008-07-08 10:19 | 火无极      
大家好,上面的那个版本又发现一个bug,正在修改中。
就是不适合亚洲文字的输入,英文,拉丁美文还是适合的。原因是回车键的控制没控制好,亚洲文字的输入法,可以回车出来,于是在我上面的判断就会出问题。
我会做相关修改的

  回复  引用  查看    
#10楼[楼主]
2008-07-14 11:42 | 火无极      
还有两个问题待解决啊:
1,我想下拉提示框的高度可以控制。当提示信息多于10条的时候,高度为10信息提示的高度,多于数据用滚动条滚动可以查看。当提示信息少于10的时候,提示框高度与显示的条数自适应,比如说显示5条,那么就是5条的高度。
2,当你提交过页面后,比如说你在页面上输入“你好”,然后你调教。再次打开改页面,在文本框做输入时,会有一个历史的输入提示,也就是说会出现“你好”这样的下拉输入提示,而且这个挡住了我的下拉提示框。我要去掉他的下拉输入提示,怎么做。

  回复  引用  查看    
2008-07-14 16:06 | 生鱼片      
最后那个是IE6的bug吧,你在IE7下看看正常不?
  回复  引用  查看    
#12楼[楼主]
2008-07-14 16:18 | 火无极      
@生鱼片
确实用的IE6啊,客户用的就是IE6啊,没办法

  回复  引用  查看    
#13楼[楼主]
2008-07-14 16:25 | 火无极      
还有问题一已经解决了
把表单元素的autocomplete属性设置为off即可

所有表单元素都不想使用autocomplete功能

<form autocomplete="off">
......
</form>

  回复  引用  查看    
#14楼[楼主]
2008-07-15 17:37 | 火无极      
显示条数的问题也解决了
我是让提示全部生成之后,判断条数,然后给文本框定的高度和滚动条,不是很复杂,开始我没考虑清楚,呵呵。

最后一个DDL挡住的问题没解决,有人说是IE6的问题,但是客户用的IE6,没办法哦。

  回复  引用  查看    
2008-09-20 20:16 | 喂喂喂[未注册用户]
我我
  回复  引用    
2008-12-17 10:40 | xjq[未注册用户]
发现了个问题~输入后匹配的提示框数据比较多,正好我的页面下有个dropdownlist控件,那个dropdownlist控件也跑到提示框里去了,提示框能否盖住页面其它的控件?
  回复  引用    
2009-01-19 10:45 | 段落[未注册用户]
博主你好。。我有一个问题。。你的using IIP.Data.SQLHelper;
和SearchText是要添加什么程序集?

  回复  引用    
2009-02-16 14:43 | 魔方网[未注册用户]
呵呵,不错!

更完成的实现:
http://www.mofun.cc/web/lwgboy/1/-/blogs/67501

  回复  引用    
2009-05-08 12:55 | billrobin      
不错!
  回复  引用  查看    
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1237355