【问题标题】:Force AutoCompleteExtender dropdown to redisplay via Javascript强制 AutoCompleteExtender 下拉列表通过 Javascript 重新显示
【发布时间】:2011-04-27 06:49:44
【问题描述】:

我有一个附加到文本框的 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 事件 在上述每种情况下都正确触发,它们只是不会导致自动完成列表重新出现。我想我还没有找到自动完成扩展器期望强制列表出现的正确事件组合。

【问题讨论】:

    标签: javascript asp.net jquery autocomplete ajaxcontroltoolkit


    【解决方案1】:

    确保将事件绑定在 $(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>
    

    【讨论】:

    • 绝对正确,并且我已经在做的事情 - 抱歉,我应该更清楚。 jQuery 事件 在上述每种情况下都正确触发,它们只是不会导致自动完成列表重新出现。我还没有找到自动完成扩展器期望强制列表出现的正确事件组合。将进行相应的编辑。
    • 尝试在您的自动完成对象上执行 showPopup(),例如文本框的点击处理程序中的 YourAutoCompleteObject.showPopup() 或 $find('autoCompleteExtender').showPopup。
    • 啊啊啊,搞定了。实际上并不是 showPopup() 做的,但在该区域的进一步调查使我找到了 _onTimerTick(),单击单选按钮后它没有被调用。谢谢!
    猜你喜欢
    • 2012-01-06
    • 2017-04-22
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多