强制AutoCompleteExtender下拉列表通过Javascript重新显示

时间:2010-10-19 03:51:54

标签: javascript asp.net jquery autocomplete ajaxcontroltoolkit

我有一个附加到文本框的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 个答案:

答案 0 :(得分:2)

确保在$(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>