TextBox
ユーザーが ASP.NETコントロールに郵便番号を入力できるセットアップがあり、AutoCompleteExtender
そのテキスト ボックスに Ajax コントロール ツールキットからのコードが添付されています。ASPX ページの静的ページ メソッドからデータを取得します。
たとえば、ユーザーがスイスの郵便番号を入力し始めてから3
少し待つと、一致する郵便番号のリストが表示されます。
3000 - Bern
3001 - Bern
等々。魅力のように機能します。
表示されているオプションの 1 つを選択する通常の方法は、マウス ポインターをリストに移動して目的のオプションを選択し、クリックするか を押しEnterて、そのテキスト ボックスに郵便番号を入力します (次に、都市名を 2 番目のテキスト ボックスに入力します)。それに)。
ここで、プロジェクト マネージャーからいくつかの追加要件を受け取りました。
Enter 選択肢のリストに移動せずに 1 つを選択できるようにしたいと考えています - 彼は、表示されている最初の (または多くの場合: のみ) エントリをこれら 2 つのテキストボックスに入れたいと考えています...
有効な 4 桁の郵便番号を入力してから、郵便番号のテキストボックスを押しTabて移動し、その郵便番号を含む最初の (おそらく唯一の) エントリを選択して「選択」する (そして詰め込む) ことができるようにしたいと考えています。 2 つのテキストボックスに入力します)。
私には難しい注文のように思えます (私はJavascript の第一人者ではありません.....) - 何かアイデアはありますか?
これは私の ASP.NET ページです (標準の ASP.NET 4.0 Web フォーム サンプル アプリでは、マスター ページを使用します。スクリプトは単純化されています。実際には、ダッシュでテキストを分割し、最初の部分を zip に貼り付けています。3001 - Bern
コードと 2 番目の部分を都市のテキスト ボックスに入力します):
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<script type="text/javascript">
function IAmSelected(source, eventArgs) {
$get('tbxCity').value = eventArgs.get_value();
}
</script>
<asp:ScriptManager runat="server" EnablePageMethods="True" />
<asp:Literal runat="server" ID="litPrompt" Text="Please enter zip code: " />
<asp:TextBox runat="server" ID="tbxZipcode" MaxLength="10" />
<act:AutoCompleteExtender runat="server" ID="acZipCode" TargetControlID="tbxZipcode" MinimumPrefixLength="1"
CompletionInterval="25" ServiceMethod="GetMatchingZipCodes" CompletionSetCount="15"
OnClientItemSelected="IAmSelected" />
<asp:TextBox runat="server" ID="tbxCity" MaxLength="50" />
</asp:Content>
そして私のコードビハインド(これも単純化されています-もちろん、実際には、Entity Frameworkデータモデルからこのデータを取得します):
[WebMethod]
[ScriptMethod]
public static string[] GetMatchingZipCodes(string prefixText, int count)
{
return new string[] { "3000 - Bern", "3001 - Bern", "4000 - Basel", "6000 - Lucerne", "6001 - Lucerne" };
}