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

时间:2011-05-20 16:11:12

标签: javascript jquery asp.net autocomplete autocompleteextender

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

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

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

2 个答案:

答案 0 :(得分: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已经不存在。

答案 1 :(得分:0)

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