Принудительное повторное отображение AutoCompleteExtender для повторного отображения через Javascript - PullRequest
2 голосов
/ 19 октября 2010

У меня есть элемент управления AjaxControlToolkit.AutoCompleteExtender, прикрепленный к текстовому полю, и три переключателя. Когда пользователь выбирает переключатель, сервисный метод, используемый для получения значений, перечисленных в AutoCompleteExtender, изменяется следующим образом:

$("#radioButtonList input").click(function() {

    var selectedValue = $(this).val();

    if (selectedValue == 0) {
        $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod1');
    }
    else if (selectedValue == 1) {
        $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod2');
    }
    else if (selectedValue == 2) {
        $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod3');
    }

    $('#textbox').focus();
}

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

Я пробовал различные механизмы запуска событий, такие как:

var press = jQuery.Event("keypress");
press.ctrlKey = false;
press.which = 77;
$('#textbox').trigger(press);

... каждый из этих ...

$('#textbox').keydown();
$('#textbox').keypress();
$('#textbox').keyup();

и даже:

$('#textbox').get(0).value += 'm';

но, похоже, ничего не вынуждает запускать правильные события, чтобы список автозаполнения снова отображался с результатами нового метода обслуживания. Как я могу сделать это, используя Javascript?

РЕДАКТИРОВАТЬ: я должен заметить: события jQuery запускаются правильно в каждом из указанных выше случаев, они просто не вызывают повторного появления списка автозаполнения, когда они это делают. Я полагаю, что еще не выбрал правильную комбинацию событий, которую autocompleteextender ожидает, чтобы список появился.

1 Ответ

2 голосов
/ 21 октября 2010

Убедитесь, что вы связываете свои события в функции $ (document) .ready (). Следующее работает правильно

      <html>
       <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript">
            </script>
            <script>
             $(document).ready(function(){
    $("#radioButtonList input").change(function() {

        var selectedValue = $(this).val();

        if (selectedValue == 0) {
           $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod1');

        }
        else if (selectedValue == 1) {
          $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod2');

        }
        else if (selectedValue == 2) {
          $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod3');

        }
//force click on text box
     $('#textbox').click()
      $('#textbox').focus();
    });
//handle click event
    $("#textbox").click(function(){
     alert("textbox clicked")
     //handle your refresh action for the textbox here
    })
    })

    </script>
    </head>
    <body>
    <input id="textbox" type="text" value="test">
    <div id="radioButtonList">
    <input type="radio" value="0">
    <input type="radio" value="1">
    <input type="radio" value="2">
    </div>
    </body>
    </html>
...