2012-10-11 10 views
5

Jakie jest najlepsze podejście do przechwytywania zdarzenia wyboru AutoCompleteExtender, ponieważ formant nie ma tego zdarzenia?Wykryj zdarzenie select AutoCompleteExtender

Oto próbka, o której mówię. Mam dwa texboxes (Location1TextBox, Location2TextBox) z połączonymi kontrolkami AutoCompleteExtender. Ta część działa dobrze. Teraz problem polega na tym, że użytkownik dokonuje selekcji z dowolnego AutoCompleteExtendera. Muszę złapać to zdarzenie i spróbować obliczyć odległość między lokalizacją1 a lokalizacją2. Wynik powinien zostać wypełniony automatycznie do DistanceTextBox. Jakieś dobre sugesstions? Mam tylko nadzieję, że nie skończy się z onchange dla pól tekstowych ...

<asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
     <ContentTemplate> 
      <asp:Label ID="TitleLabel" runat="server" Text='<% $resources:AppResource,LocationStart %>' 
       CssClass="OneColumnLabel"></asp:Label>:<br /> 
      <asp:TextBox ID="Location1TextBox" runat="server" CssClass="TwoColumnMiddleLongText" 
       ValidationGroup="Edit" AutoPostBack="true"></asp:TextBox>* 
      <asp:RequiredFieldValidator ID="TitleRequiredFieldValidator" runat="server" ControlToValidate="Location1TextBox" 
       Display="None" ErrorMessage='<% $resources:AppResource,LocationRequired %>' ValidationGroup="Edit"></asp:RequiredFieldValidator> 
      <ajaxToolkit:AutoCompleteExtender runat="server" ID="AutoCompleteExtender1" TargetControlID="Location1TextBox" 
       ServiceMethod="GetCompletionList" ServicePath="TravelOrder.aspx" MinimumPrefixLength="1" 
       CompletionInterval="300" UseContextKey="True"> 
      </ajaxToolkit:AutoCompleteExtender> 
      <asp:Label ID="Label7" runat="server" Text='<% $resources:AppResource,LocationArrival %>' 
       CssClass="OneColumnLabel"></asp:Label>:<br /> 
      <asp:TextBox ID="Location2TextBox" runat="server" CssClass="TwoColumnMiddleLongText" 
       ValidationGroup="Edit"></asp:TextBox>* 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="Location2TextBox" 
       Display="None" ErrorMessage='<% $resources:AppResource,LocationRequired %>' ValidationGroup="Edit"></asp:RequiredFieldValidator> 
      <ajaxToolkit:AutoCompleteExtender runat="server" ID="AutoCompleteExtender2" TargetControlID="Location2TextBox" 
       ServiceMethod="GetCompletionList" ServicePath="TravelOrder.aspx" MinimumPrefixLength="1" 
       CompletionInterval="300" UseContextKey="True"> 
      </ajaxToolkit:AutoCompleteExtender> 
      <asp:Label ID="Label8" runat="server" Text='<% $resources:AppResource,Distance %>' 
       CssClass="OneColumnLabel"></asp:Label>:<br /> 
      <asp:TextBox ID="DistanceTextBox" runat="server" CssClass="OneColumnText" ValidationGroup="Edit"></asp:TextBox>* 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="DistanceTextBox" 
       Display="None" ErrorMessage='<% $resources:AppResource,DistanceRequired %>' ValidationGroup="Edit"></asp:RequiredFieldValidator> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Odpowiedz

6

Możesz usunąć AutoPostBack="true" z pola tekstowego docelowej, zapisz się na razie TextChanged i korzystać z funkcji poniżej jako przewodnika dla zdarzenia klienta itemSelected Extender jest OnClientItemSelected="autoCompleteEx_ItemSelected":

<script type="text/javascript"> 
    function autoCompleteEx_ItemSelected(sender, args) { 
      __doPostBack(sender.get_element().name, ""); 
    } 
</script> 
+0

Yuriy uratowałeś mój dzień! Właśnie tego szukałem, miło i efektywnie! :) –

Powiązane problemy