0

我有一个设置,其中有一个 ASP.NET 4.0 用户控件,其中包含两个文本框OK和一个Cancel按钮。

第一个文本框附加了一个 Ajax Control Toolkit Autocomplete Extender,用于在用户开始输入内容时显示匹配的瑞士邮政编码列表。奇迹般有效。

我还将DefaultButton用户控件的最外层<asp:Panel>设置为保存(确定)按钮。

现在我遇到了这样一种情况:用户开始输入一些东西,为他的案例获取一个“自动完成”的选项列表,然后从该自动完成列表中选择一个项目。当用户现在按下Enter做出选择时,发生的情况是数据很好地填充到文本框中 - 但用户控件也关闭(它作为模式弹出窗口打开),因为它Enter也触发了DefaultButton“点击”及其处理程序被执行。

有什么方法可以“吞下”或阻止Enter击键冒泡到面板上?

这是我的标记和代码:

<script type="text/javascript">
   function IAmSelected(source, eventArgs) {
       var textval = eventArgs.get_text().split(' - ');

       $('#<%= tbxZipCode.ContainedTextBoxClientID %>').val(textval[0]);
       $('#<%= tbxCity.ContainedTextBoxClientID %>').val(textval[1]);

       // here, I tried "return false;"  - didn't work either....
       source.preventDefault(); 
   }

<asp:Panel runat="server" ID="PanelZipCodes" DefaultButton="btnSave">

    <asp:TextBox runat="server" ID="tbxZipCode" />
    <asp:AutoCompleteExtender runat="server" ID="AutoCompletePlz" TargetControlID="tbxZipCode" BehaviorID="ZipCodeBehavior" 
                              Enabled="True" MinimumPrefixLength="1" CompletionInterval="50" CompletionSetCount="15"
                              FirstRowSelected="True" ServiceMethod="GetMatchingPlz" OnClientItemSelected="IAmSelected" />

    <asp:TextBox runat="server" ID="tbxCity" />

    <asp:Button runat="server" ID="btnSave" OnClick="btnSaveClick" />    
    <asp:Button runat="server" ID="btnCancel" OnClick="btnCancelClick" />
</asp:Panel>

有任何想法吗?我相信我必须在IAmSelected脚本片段中做一些事情——但究竟是什么?我尝试使用return false;- 没有用;然后我尝试source.preventDefault();了-也不起作用-Enter仍然“冒泡”到面板并使其“单击”btnSave按钮并关闭模式弹出窗口...

4

1 回答 1

1

不确定这是否会有所帮助,让我们试试吧。下载 AjaxControlToolkit 源并尝试更改此文件:AutoCompleteBehavior.pre.js

添加到_onKeyDown方法单行代码

    else if (k === Sys.UI.Key.enter) {
        if (this._selectIndex !== -1) {
            this._setText(this._completionListElement.childNodes[this._selectIndex]);
            ev.stopPropagation(); // added line
            ev.preventDefault();
        } else {
            // close the popup
            this.hidePopup();
        }
    }
于 2013-02-13T17:36:01.823 回答