Как связать обработчик событий javascript со списком Ajax Control Toolkit при изменении текстового поля - PullRequest
3 голосов
/ 22 сентября 2009

Мне нужен комбинированный список для проекта ASP.NET, поэтому я решил использовать комбинированный список Ajax Control Toolkit (http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ComboBox/ComboBox.aspx).

Я не хочу использовать обратную передачу, поскольку не хочу, чтобы страница была перезагружена, но мне нужно знать, когда текст в текстовом поле изменяется, чтобы я мог обратиться к серверу, чтобы сохранить новый элемент списка.

Мне любопытно, как я связываю событие onchange или onblur с полем ввода, которое использует этот комбинированный список.

Это моя страница asp.net:

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

<cc1:ComboBox ID="PlantDropDown" runat="server" OnInit="PlantDropDown_Init" DropDownStyle="DropDown" 
             AutoCompleteMode="SuggestAppend" 
            ItemInsertLocation="OrdinalText" AutoPostBack="false">


                </cc1:ComboBox>

Обновление: я попытался использовать предложение, и я получаю эту ошибку:

$find("PlantDropDown") is null
[Break on this error] $find('PlantDropDown').add_propertyChanged(function(sender, e) {\r\n

Я использую jQuery для javascript, кстати, на случай, если это поможет.

Окончательное обновление: Я получил его на работу благодаря помощи crescentfresh, и в конце у меня есть это в моем .aspx файле:

    <input type="hidden" id="PlantDropDownID" value="<%= PlantDropDown.ClientID %>" />

И это в моем файле javascript, так как я не помещаю javascript в мой файл .aspx:

elem = document.getElementById('PlantDropDownID');
$find(elem.value).add_propertyChanged(function(sender, e) {
    if (e.get_propertyName() == 'selectedIndex') {
        var newValue = sender.get_textBoxControl().value;
    }
})

Ответы [ 2 ]

8 голосов
/ 22 сентября 2009

Я полагаю, что вы должны привязаться к событию "propertyChanged" и проверить изменения в свойстве "selectedIndex":

$find('PlantDropDown').add_propertyChanged(function(sender, e) {
    if (e.get_propertyName() == 'selectedIndex') {
        var newValue = sender.get_textBoxControl().value;

        // persist selected value here...
    }
})

с обычным предупреждением о .NET идентификаторах управления в клиенте .

API - это не просто, это точно. Например, нет метода .get_value(), который был бы неплох, вместо того чтобы проходить через встроенный элемент управления textbox.

Редактировать

> $ find ("PlantDropDown") равно нулю

Убедитесь, что вы используете правильный идентификатор . См. .NET идентификаторы управления в клиенте . Чтобы получить справку, вам может потребоваться:

$find('<%= PlantDropDown.ClientID %>')

> Я использую jQuery для javascript

Это не имеет никакого отношения.

1 голос
/ 11 ноября 2009

Я обнаружил, что не смог получить предоставленный ответ, пока не заключил его в функцию, как показано ниже Не уверен, почему это так, но, надеюсь, это спасет кого-то еще от боли.

<script language="javascript" type="text/javascript">

    Sys.Application.add_load(initializePage);

    function initializePage() {
        $find('PlantDropDown').add_propertyChanged(function(sender, e) {    
        if (e.get_propertyName() == 'selectedIndex') {        
        var newValue = sender.get_textBoxControl().value;        
        // persist selected value here...    
        }})
    }

</script>
...