导航

ajaxToolkit:AutoCompleteExtender 的触发选择(选中)事件

Posted on 2011-03-01 10:28  ykhi  阅读(1603)  评论(0)    收藏  举报

之前我已经写了两篇关于AutoCompleteExtender的文章: ajaxToolkit:AutoCompleteExtender的自定义参数(contextKey) ajaxToolkit:AutoCompleteExtender 用法详解, 现在讨论这个控件的另一个我个人认为非常重要的功能: 触发选择事件.

AutoCompleteExtender 的功能就是提供一个下拉列表, 让用户从中选择一项, 那么, 当用户选择了其中某一项的时候, 触发一个事件, 不是非常合理的要求么? 然而莫名其妙的是, 这个控件并没有这个事件, 换言之, 我们无法在用户选中某一项时执行动作, 这一点曾经让我非常苦闷, 甚至一度想自己实现一个类似的控件, 正当我正式开始考虑自己做这个控件时, 忽然想到ajaxControlToolkit 这个项目是开源的, 这一下让我兴奋起来, 于是马上找到微软的下载页面: http://www.codeplex.com/AjaxControlToolkit/Release/ProjectReleases.aspx?ReleaseId=16488(页面上有四个下载项, 选第一项:AjaxControlToolkit-Framework3.5SP1.zip ) 把项目的源码下载了下来.

找到项目中AjaxControlToolkit/AutoComplete/AutoCompleteBehavior.js ,  有一个函数: _setText:function(item){...} , 这就是当用户选择时执行的函数, 我在这个函数的末尾加了这样两行:
if(typeof(OnACSetText)=="function") 
OnACSetText(element.id); 
保存 , 重新编译, 在AjaxControlToolkit\bin\Debug 下会得到一个新的AjaxControlToolkit.dll , 把它放到自己的项目的bin 目录中, 就大功告成了. 在页面中这样调用: 
function OnACSetText(id)
{
//ctr是宿主文本框的服务器端ID. 
var targetID="<%=ctr.ClientID %>";
if(id!=targetID)
return;
//targetCtrl 就是autoCompleteExtender 的宿主文本框 
var targetCtr=$get(id);
//......do something else
}

虽然这种做法比较粗糙, 并且也不是一个真正的"事件", 但是它非常简洁, 并且能够满足我们的需求, 也算是一个比较好的解决方案了. 希望在以后的版本中, 可以有官方的事件可用.

---------------------------------------------

作者:夏狼哉 
博客:http://moosdau.blog.163.com

如需引用,敬请保留作者信息,谢谢