2009-05-12 4 views
6

У меня есть страница с двумя полями ввода Город и место проведения. У меня есть автозаполненный плагин от Devbridge, который отлично подходит для городского поля. Теперь я хочу, чтобы он работал над местом проведения. Javascript У меня до сих пор:Jquery Autocomplete Chained Requests

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#Event_City').autocomplete({ 
      serviceUrl: '<%=Url.Action("GetCities", "Search") %>', 
      minChars:2, 
      width: 300, 
      delimiter: /(,|;)\s*/, 
      deferRequestBy: 150, //miliseconds 
      params: { country: 'Yes' }, 
     }); 
     $('#Event_Venue').autocomplete({ 
      serviceUrl: '<%=Url.Action("GetVenues", "Search") %>', 
      minChars:2, 
      width: 300, 
      delimiter: /(,|;)\s*/, 
      deferRequestBy: 150, //miliseconds 
      params: { city: $("#Event_City").val() }, 
     }); 
    });  
</script> 

второй автозаполнения проходит дополнительный (город параметра Я) к действию на мой контроллер. Затем я буду использовать это, чтобы ограничить мои ответы на места в этом городе. Этот параметр получен, но не содержит текущего значения, введенного в #Event_City. Вместо этого он содержит значение по умолчанию.

Кто-нибудь знает, как оценить значение при вызове автозаполнения?

Я только начинаю с Javascript, поэтому, пожалуйста, будьте осторожны.

Спасибо,

+0

Я собирался спросить то же самое. Я пытался передать параметр «нормально», но я думаю, что поле не обновляется без использования события onchange. –

ответ

7

@Ian Маккей - Для того, чтобы получить автозаполнения для Места проведения фильтрации по городу, вам нужно связать в «изменить» случае города следующим образом:

$(document).ready(function() { 
    $('#Event_City').autocomplete({ 
     serviceUrl: '', 
     minChars:2, 
     width: 300, 
     delimiter: /(,|;)\s*/, 
     deferRequestBy: 150, //miliseconds 
     params: { country: 'Yes' }, 
    }).change(function(){ 
     $('#Event_Venue').autocomplete({ 
      serviceUrl: '', 
      minChars:2, 
      width: 300, 
      delimiter: /(,|;)\s*/, 
      deferRequestBy: 150, //miliseconds 
      params: { city: $("#Event_City").val() } 
     }); 
    }); 
}); 
+0

Вы уверены, что это не будет связывать плагин автозаполнения с текстовым полем более одного раза? Это может быть плохо. Например, если вы измените значение первого текстового поля, скажем, 20 раз, второе текстовое поле будет автоматически отключено - 20 раз (и, следовательно, сделает 20 асинхронных аякс-вызовов на бэкэнд за один раз)? o_0 – KyleFarris

+0

@Kyle - Я верю, вы правы. Это произойдет, если пользователь решит вернуться и изменить город. Стандартный автозаполненный плагин jQuery имеет опцию «destroy», которая может быть передана, но этого нет. –

3

Причина содержит значение по умолчанию, потому что автозаполнения прилагается в текстовое поле при загрузке страницы. Для того, чтобы он обновлялся с новым значением, плагин должен был предоставить вам способ обновить свойства его объекта-параметра или разрешить его уничтожить на втором элементе, а затем перестроить его каждый раз, когда пользователь меняет первый свою ценность. Выбранная автозаполняемая библиотека выглядит довольно легко (не всегда плохой ... как раз в вашем случае это ...) и, похоже, не поддерживает эту функциональность.

Мое лучшее предложение для вас - попробовать другую библиотеку. Я, как правило, нравится это очень много, как это довольно универсальные (демонстрационная страница):

http://view.jquery.com/trunk/plugins/autocomplete/demo/

+0

Вы поднимаете очень хорошую точку +1 – ichiban