【问题标题】:ASP.NET AJAX Toolkit Combobox: avoid the need to click ENTER twice to postbackASP.NET AJAX Toolkit Combobox:避免需要单击 ENTER 两次回发
【发布时间】:2009-11-18 01:35:20
【问题描述】:

我在我的应用程序中使用 ComboBox 作为功能,并且我有 AutoCompleteMode="Suggest"。

但是,在我输入文本框进行搜索后,我需要按两次 ENTER 才能回发并显示一些结果。这是默认行为,如oficial demonstration 中所示。 在我看来,这有点烦人而且不直观......

任何人都知道如何避免这种行为,只需按一次?

提前致谢

【问题讨论】:

    标签: c# asp.net asp.net-ajax ajaxcontroltoolkit


    【解决方案1】:

    我遇到了同样的问题并解决了:

    如果您不希望按钮被点击两次,则必须将 autopostback 属性设置为“false”。

    【讨论】:

      【解决方案2】:

      将控件的AutoPostback属性更改为true。这将捕获 tab 键,因为控件失去焦点而起作用。

      我怀疑是否有一种很好的方法可以为此设置回车键,除非您准备好破解源代码并进行一些修改。

      <ajaxToolkit:ComboBox ID="ComboBox1" runat="server" 
           AutoPostBack="True" 
           DropDownStyle="DropDownList" 
           AutoCompleteMode="SuggestAppend" 
           CaseSensitive="False" 
           CssClass="" 
           ItemInsertLocation="Append" ... > 
      

      【讨论】:

      • 不幸的是,我已经尝试过了,但没有用。我尝试过其他属性,但也没有成功。
      • 如果 AutoPostBack=true,tab 键在演示中有效。大多数不知道这一点的人只会点击提交按钮。
      【解决方案3】:

      Tom,Jan 是对的,我以前也遇到过这种情况。您只需要将自动回发设置为 false。因此,您可能需要将 ComboBox 自动回发设置为 false。

      【讨论】:

        【解决方案4】:

        我设法用下面的代码解决了这个问题:

        在您的 aspx 文件中,组合框控件将是:

        <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();
                }
        }
        

        我希望我上面的代码能回答你的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-04
          • 2017-05-23
          • 2014-12-03
          • 2016-04-15
          • 1970-01-01
          • 2016-02-21
          • 2012-09-17
          相关资源
          最近更新 更多