0

OK2 つのテキスト ボックスと 1 つのボタンを含む ASP.NET 4.0 ユーザー コントロールがあるセットアップがありCancelます。

最初のテキスト ボックスには Ajax Control Toolkit Autocomplete Extender が接続されており、ユーザーが何かを入力し始めると、一致するスイスの郵便番号のリストが表示されます。魅力のように機能します。

またDefaultButton、ユーザー コントロールの最も外側<asp:Panel>を保存 (OK) ボタンに設定しました。

ここで、ユーザーが何かを入力し始め、そのケースの選択肢の「オートコンプリート」リストを取得し、そのオートコンプリート リストから項目の 1 つを選択するケースに遭遇しています。ユーザーが選択を行うために押す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メソッドに1行のコードを追加する

    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 に答える