3

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

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

我知道如何获取 AutoCompleteExtender 客户端,但我也在寻找一种方法来更新 TargetControlID 客户端。有任何想法吗?

4

2 回答 2

2

很遗憾,这对于 AutoCompleteExtender 的现有实例是不可能的。您可能对以下几种方法感兴趣

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阶段)。当将初始化版本更改为目标时(如您所愿),则不会添加这些事件keypressblur,因此您看不到任何更改。但是,如果您知道 javascript,您可以执行以下操作以使其适用于任何文本框。

$create(Behavior,{properties},{events},interfaces,target);

在哪里

行为

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("ELEMENT ID")

现在一切都结束了,您可以一直通过 javascript 初始化自动完成的实例。只需确保该 ID 已不存在即可。

于 2012-04-24T09:08:23.053 回答
0

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

于 2012-05-17T15:27:09.267 回答