Как передать дополнительный параметр в поле автозаполнения Jquery?
Я использую автозаполнение JQuery в одной из своих форм.
Основная форма выбирает продукты из моей базы данных. Это отлично работает, но я хотел бы продолжить разработку, чтобы возвращались только продукты, отправленные с определенного кода zipcode. Я уже разобрался со сценарием бэкенда. Мне просто нужно придумать лучший способ передать zip-код этому скрипту.
Это как моя форма выглядит.
<form>
<select id="zipcode">
<option value="2000">2000</option>
<option value="3000">3000</option>
<option value="4000">4000</option>
</select>
<input type="text" id="product"/>
<input type="submit"/>
</form>
А вот код JQuery:
$("#product").autocomplete
({
source:"product_auto_complete.php?postcode=" + $('#zipcode').val() +"&",
minLength: 2,
select: function(event, ui){
//action
}
});
Этот код работает до некоторой степени. Но только возвращает первое значение zipcode независимо от того, какое значение фактически выбрано. Я думаю, что происходит то, что исходный URL-адрес загружается при загрузке страницы, а не при изменении меню выбора. Есть ли способ обойти это? Или есть лучший способ в целом достичь желаемого результата?
8 ответов:
Вам нужно использовать другой подход для вызова
source
, например:$("#product").autocomplete({ source: function(request, response) { $.getJSON("product_auto_complete.php", { postcode: $('#zipcode').val() }, response); }, minLength: 2, select: function(event, ui){ //action } });
Этот формат позволяет передавать любое значение , когда оно выполняется, в отличие от , когда оно связано.
Это не для сложных людей:
$(document).ready(function() { src = 'http://domain.com/index.php'; // Load the cities straight from the server, passing the country as an extra param $("#city_id").autocomplete({ source: function(request, response) { $.ajax({ url: src, dataType: "json", data: { term : request.term, country_id : $("#country_id").val() }, success: function(data) { response(data); } }); }, min_length: 3, delay: 300 }); });
Я считаю, что вы правы, думая, что ваш вызов
$("#product").autocomplete
срабатывает при загрузке страницы. Возможно, вы можете назначить обработчик onchange() меню select:$("#zipcode").change(resetAutocomplete);
И сделать его недействительным вызов
#product
autocomplete() и создать новый.function resetAutocomplete() { $("#product").autocomplete("destroy"); $("#product").autocomplete({ source:"product_auto_complete.php?postcode=" + $('#zipcode').val(), minLength: 2, select: function(event, ui){... } }); }
Вы можете захотеть, чтобы ваш вызов resetAutocomplete() был немного умнее - например, чтобы проверить, действительно ли почтовый индекс отличается от последнего значения-чтобы сохранить несколько вызовов сервера.
jQuery("#whatJob").autocomplete(ajaxURL,{ width: 260, matchContains: true, selectFirst: false, minChars: 2, extraParams: { //to pass extra parameter in ajax file. "auto_dealer": "yes", }, });
Эта работа для меня. Переопределить событие
search
:jQuery('#Distribuidor_provincia_nombre').autocomplete({ 'minLength':0, 'search':function(event,ui){ var newUrl="/conf/general/provincias?pais="+$("#Distribuidor_pais_id").val(); $(this).autocomplete("option","source",newUrl) }, 'source':[] });
$('#product').setOptions({ extraParams: { extra_parameter_name_to_send: function(){ return $("#source_of_extra_parameter_name").val(); } } })
Надеюсь, что это поможет кому-то:
$("#txt_venuename").autocomplete({ source: function(request, response) { $.getJSON('<?php echo base_url(); ?>admin/venue/venues_autocomplete', { user_id: <?php echo $user_param_id; ?>, term: request.term }, response); }, minLength: 3, select: function (a, b) { var selected_venue_id = b.item.v_id; var selected_venue_name = b.item.label; $("#h_venueid").val(selected_venue_id); console.log(selected_venue_id); } });
Термин по умолчанию будет заменен новым списком параметров, поэтому вам потребуется добавить его снова.