Набор инструментов ASP.NET AJAX Toolkit: избегайте необходимости дважды нажимать клавишу ВВОД для обратной передачи - PullRequest
1 голос
/ 18 ноября 2009

Я использую ComboBox для функции в моем приложении, и у меня AutoCompleteMode = "Suggest".

Однако после того, как я ввожу текстовое поле для поиска, мне нужно дважды нажать клавишу ВВОД, чтобы выполнить обратную передачу и показать некоторые результаты. Это поведение по умолчанию, как показано в официальной демонстрации . На мой взгляд, это немного раздражает и не интуитивно понятно ...

Кто-нибудь знает, как избежать такого поведения, и нажимает только один раз?

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 25 ноября 2010

Я столкнулся с той же проблемой и решил ее:

Необходимо установить для свойства autopostback значение «false», если вы не хотите, чтобы кнопка нажималась дважды.

1 голос
/ 18 декабря 2012

Том, Ян прав, и это случилось со мной раньше. вам просто нужно установить автопост на false. Так что, вероятно, вам нужно установить автостоп ComboBox на false.

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

Измените атрибут AutoPostback элемента управления на true. Это перехватит клавишу табуляции, которая работает, потому что элемент управления теряет фокус.

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

<ajaxToolkit:ComboBox ID="ComboBox1" runat="server" 
     AutoPostBack="True" 
     DropDownStyle="DropDownList" 
     AutoCompleteMode="SuggestAppend" 
     CaseSensitive="False" 
     CssClass="" 
     ItemInsertLocation="Append" ... > 
0 голосов
/ 30 мая 2013

Мне удалось решить эту проблему с кодом ниже:

В вашем aspx-файле элемент управления combobox будет:

<ajaxToolkit:ComboBox ID="cbCountries" CssClass="AquaStyle2" runat="server" AutoPostBack="true" DropDownStyle="DropDownList"
        AutoCompleteMode="SuggestAppend" CaseSensitive="False" ItemInsertLocation="Append" onkeydown="FireEnterKey(this, event)" />

Затем добавьте ссылку на файл javascript и добавьте туда следующую функцию:

function FireEnterKey(elem, evt) {
    var keyCode = evt ? (evt.which ? evt.which : evt.keyCode) : event.keyCode;

    if (keyCode != 13)
        return;

        var belem = $get(elem.attributes.id.value + "_Button");  //ctl00_ContentPlaceHolder1_cbCountries_Button
        var telem = $get(elem.attributes.id.value + "_TextBox");  //ctl00_ContentPlaceHolder1_cbCountries_TextBox

        if (navigator.userAgent.search("Firefox") >= 0) {
            elem.onchange();
        }
        else if (navigator.userAgent.search("MSIE") >= 0) {
            elem.onchange();
            telem.blur();
        }
        else {  // Opera, Safari, Chrome
            telem.blur();
        }
}

Надеюсь, мой код выше отвечает на ваш вопрос.

...