改进Vazumi实现的:extaspnet 实现自动完成autocomplete 下拉功能

由于csdn对评论的字数限制比较吝啬,所以成文于此,描述了对Vazumi实现的autocomplete特性的两点改进。

请参考Vazumi的原文:extaspnet 实现自动完成autocomplete 下拉功能

http://blog.csdn.net/vazumi/archive/2011/05/24/6441639.aspx

测试环境:VS2008+ExtAspNet2.3.2+IE7

改进1、

问题:keyup太灵敏,频繁触发后台事件

解决:将keyup事件当成textchanged事件来使用,代码改动如下

                ExtAspNet.PageContext.RegisterStartupScript
                    (
                    "var d=Ext.getCmp('" + DropDownList1.ClientID + "');" +
                    " var oldInput=\"\";" +
                    " d.listWidth=500; " +
                    " d.addListener(\"keyup\",function(f,e){ " +
                    " var newInput=document.getElementById(\"" + DropDownList1.ClientID + "\").value;" +
                    " if (oldInput==newInput) {return;} " +
                    " oldInput=newInput;" +
                    " __doPostBack('loaddata',newInput);" +
                    "});"
                    );

改进2、

问题:ddl的数据源在随着关键字的变化没有变化时,客户端会在当前ddl的记录中,过滤出以当前输入的关键字开头的记录,注意是开头,如果是匹配随便哪个位置的话,倒没这个问题的存在了。正因为是开头,所以得到的结果往往并非期望的。

解决:保证每次查询后,ddl的数据源都是不一样的,思路就是给ddl的value添加时间戳,代码改动如下

                    while (dr.Read())
                    {
                        DropDownList1.Items.Add(new ExtAspNet.ListItem(dr["id"].ToString() + "-" + dr["name"].ToString(), dr["id"].ToString() + DateTime.Now.Ticks.ToString()));//给ddl的value加上时间戳
                    }

 

补充一张效果图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值