2012-03-16 2 views
0

У меня есть структура ASP.NET вроде этого:jQueryUI автозаполнения поле обновляется текстовое поле не реагирует правильно

<asp:TextBox ID="txtCity" runat="server"></asp:TextBox> 
<asp:TextBox ID="txtArea" runat="server"></asp:TextBox> 

и попытаться использовать jQueryUI автозаполнения на обоих полях, вот Javascript, что я использую:

$(document).ready(function() { 
    $('#<%= txtArea.ClientID %>').autocomplete({ 
     minLength: 3, 
     search: function(event, ui) { alert($('#<%= txtCity.ClientID%>').val()); }, 
     source: "handlers/AreaLocator.ashx?loc=" + $('#<%= txtCity.ClientID%>').val(), 
     select: function(event, ui) { alert('aa'); } 
    }); 

    $('#<%= txtCity.ClientID %>').autocomplete({ 
     minLength: 3, 
     source: "handlers/CityLocator.ashx", 
     select: function(event, ui) { 
      $('#<%= txtCity.ClientID%>').val(ui.item.city); 
     } 
    }); 

}); 

но в моем коде позади в AreaLocator.ashx Я не могу получить значение для loc querystring. Удивительно, поиск события txtArea autocomplete отображает мне значение, выбранное в автозаполнении txtCity. Кто-нибудь предлагает мне, что я делаю неправильно? Заказ как автоматического завершения не имеет никакого значения, так и нет проблемы с перекрестным браузером.

Благодаря

ответ

0

Это будет не совсем работа, потому что ваш селектор в опции source будет оцениваться только один раз. У вас есть два варианта:

  1. Переименовать loc в term на сервере. В этом случае, ваш JavaScript будет просто:

    $('#<%= txtArea.ClientID %>').autocomplete({ 
        minLength: 3, 
        search: function(event, ui) { alert($('#<%= txtArea.ClientID%>').val()); }, 
        source: "handlers/AreaLocator.ashx", 
        select: function(event, ui) { alert('aa'); } 
    }); 
    

    Затем на сервере, будет искать term вместо loc. Autocomplete добавит параметр term к URL-адресу.

  2. Если это не возможно, или вы не хотите изменить код на стороне сервера, вы можете сделать свой AJAX просить себя, передавая функцию к source опции:

    $('#<%= txtArea.ClientID %>').autocomplete({ 
        minLength: 3, 
        search: function(event, ui) { alert($('#<%= txtArea.ClientID%>').val()); }, 
        source: function (request, response) { 
         $.ajax({ 
          url: "handlers/AreaLocator.ashx", 
          data: { loc: $('#<%= txtCity.ClientID%>').val() }, 
          dataType: "json", 
          success: response, 
          error: function() { 
           response([]); 
          } 
         });     
        } 
        select: function(event, ui) { alert('aa'); } 
    }); 
    

Что касается ваша другая проблема:

Удивительно, что событие txtArea autocomplete отображает мне значение, выбранное в автозаполнении txtCity.

Это просто потому, что у вас есть опечатка в событии поиска автозаполнения txtArea.

alert($('#<%= txtCity.ClientID%>').val()); 

должно быть:

alert($('#<%= txtArea.ClientID%>').val()); 
+0

Спасибо Эндрю за ответ, но вы изменили мой код немного, вы используете txtArea в случае поиска txtArea автозаполнения. Фактически txtArea зависит от поля txtCity, поэтому мне нужно отправить имя города в AreaLocator.ashx. Я был поражен, потому что событие поиска автозаполнения txtArea заполняет txtCity, с другой стороны сразу после события поиска исходное событие не может привязать значение txtCity к URL. – Soofi

+0

Думаю, я вижу, что вы говорите. Я обновил свой ответ, чтобы автозаполнение для 'txtArea' использовало значение из' txtCity'. Это то, что тебе надо? –

+0

Я пробовал ajax с большим количеством вариаций, но не повезло. JSON, созданный моим кодом позади [{«area»: 87, «label»: «Gul Bahar»}, {«area»: 88, «label»: «Gulistan-e-Jauhar»}], не заполняется. Я проверил его (http://jsonlint.com/), и он действителен. – Soofi

Смежные вопросы