Как я могу изменить TargetControlID клиентской части AutoCompleteExtender (JavaScript)? - PullRequest
3 голосов
/ 20 мая 2011

Обычно я могу установить сторону сервера TargetControlID, используя что-то вроде этого:

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

Я знаю, как получить клиентскую часть AutoCompleteExtender, но я ищу способ обновить клиентскую часть TargetControlID. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2012

К сожалению, это невозможно для существующего экземпляра 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). Когда инициализированная версия выполняется для изменения в качестве цели (как вы хотели сделать), эти события keypress, blur и т. Д. Не добавляются, поэтому вы не видите никаких изменений. Но если вы знали 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 все время. Просто убедитесь, что идентификатор уже не существует.

0 голосов
/ 17 мая 2012

Очевидно, Microsoft не думала, что это важно, поэтому в настоящее время нет способа сделать это:)

...