如何更改AutoCompleteXtender客户端(javascript)的TargetControlID?

如何更改AutoCompleteXtender客户端(javascript)的TargetControlID?,javascript,jquery,asp.net,autocomplete,autocompleteextender,Javascript,Jquery,Asp.net,Autocomplete,Autocompleteextender,通常,我可以使用如下方式设置TargetControlID服务器端: AutoCompleteExtender ace = new AutoCompleteExtender(); ace.ID = "AutoCompleteExtender1"; ace.TargetControlID = "whatever"; 我知道如何获取AutoCompleteXtender客户端,但我也在寻找更新TargetControlID客户端的方法。有什么想法吗?很遗憾,对于现有的Aut

通常,我可以使用如下方式设置TargetControlID服务器端:

    AutoCompleteExtender ace = new AutoCompleteExtender();
    ace.ID = "AutoCompleteExtender1";
    ace.TargetControlID = "whatever";

我知道如何获取AutoCompleteXtender客户端,但我也在寻找更新TargetControlID客户端的方法。有什么想法吗?

很遗憾,对于现有的AutoCompleteXtender实例,这是不可能的。下面是一些您可能感兴趣的方法

var x = $find("AutocompleteBehaviorID");//find the instance

x.get_completionListElementID();//get the ID of target textbox

x.set_completionListElementID();//set the ID of target textbox has no effect though :(

x._completionListElement();//direct access to DOM element that acts as target
这里的问题似乎是初始化版本在控件工具包的
init
阶段将附加事件附加到目标文本框(是的,客户端也有
init
阶段)。当初始化版本更改为目标时(如您所愿),则不会添加这些事件
按键
模糊
等,因此您不会看到任何更改。但是,如果你知道javascript,你可以做下面的工作,使它与任何文本框一起工作

$create(行为、{properties}、{events}、接口、目标)

在哪里

行为
AjaxControlToolkit.AutoCompleteBehavior

性质 是一个javascript对象,如下所示(有更多属性,但这些就足够了

{
    "completionInterval": 1,
    "completionListElementID": "empty panel id",
    "completionListItemCssClass": "css class name",
    "delimiterCharacters": ";",
    "highlightedItemCssClass": "css class name",
    "id": "CLIENTSIDEID",
    "minimumPrefixLength": 1,
    "serviceMethod": "WebMethodName",
    "servicePath": "AbsolutePath to asmx file"
}
事件 还有更多的活动可供选择

{
    "itemSelected": jsFn,
    "populated": jsFn
}
目标 目标元素是最重要的。所有事件、钟声和口哨都会被这个文本框吸引

$get(“元素ID”)


现在一切都结束了,你可以一直通过javascript初始化auto complete的一个实例。只需确保ID已经不存在。

显然微软认为这并不重要,所以现在没有办法做到这一点:)

也许这根本不可能??看看jqueryautocomplete是否有帮助:我喜欢未来的建议(jqueryautocomplete)。我将来可能会换工作。但是我正处于项目截止日期,所以我不能中途切换:)接受不能更改的TargetControlID,想知道为什么要在客户端更改它?正是这样的东西让我放弃了AJAX控制工具包。如果你想做任何有点不寻常的事,你会很不开心的。我把它换成了只使用JQuery和Page方法,再也没有回头看。显然,AjaxControlToolkit现在是Sys.Extended.UI,所以$create(AjaxControlToolkit.AutoCompleteBehavior,…);将是$create(Sys.Extended.UI.AutoCompleteBehavior,…);