Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   extraParams в autocomplete (https://javascript.ru/forum/jquery/2585-extraparams-v-autocomplete.html)

be3 19.01.2009 12:49

extraParams в autocomplete
 
Здравствуйте, к сожалению мало знаком с javascript, поэтому не могу решить самостоятельно.
Суть проблемы заключается в том что, есть два поля:
1 Поле select с выбором района
2 input в выбором улицы, для него реализовано автодополнение

Не могу передать value из select в extraParams для автодополнения.

<select name="distinct">
<option value="1">Левый</option>
<option value="2">Правый</option>
</select>
<input type="text" id="example1" />

<script type="text/javascript">
$(document).ready(function(){
// --- Автозаполнение ---
function liFormat (row, i, num) {
	var result = row[0] + '<p class=qnt>' + row[1] + ' тыс.чел.</p>';
	return result;
}
function selectItem(li) {
	if( li == null ) var sValue = 'А ничего не выбрано!';
	if( !!li.extra ) var sValue = li.extra[2];
	else var sValue = li.selectValue;
	alert("Выбрана запись с ID: " + sValue);
}


$("#example1").autocomplete("<?php echo base_url()?>welcome/autocomplete", {	
	delay:10,
	minChars:2,
	matchSubset:1,
	autoFill:true,
	matchContains:1,
	cacheLength:10,
	selectFirst:true,
	formatItem:liFormat,
	maxItemsToShow:10,
	onItemSelect:selectItem,
	extraParams: {
		destinct: _CurrentFieldName}
		
}); 

})

Пример реализации брал от сюда http://www.linkexchanger.su/2008/39.html
Пробовал вариант с onchange="_CurrentFieldName = this.value". Но перменная _CurrentFieldName определяется как undefined. В принципе оно и понятно почему, инициализация перменной и подстановка значения в autocomplete происходит при загрузке страницы.

Подскажите, пожалуйста, как можно решить мою проблему или в какой стороне копать.

Octane 19.01.2009 16:40

Как то так
$(select[name="distinct"]).select(function() {
   var value = this.getElementsByTagName('option')[this.selectedIndex].value // — получить значение выбранного элемента селекта
   // теперь это значение, наверное, нужно заново отправить в $("#example1").autocomplete(…)
});

be3 21.01.2009 12:16

Добавил к элементу select id="distinct"
и в параметрах вставил строку
extraParams: {a: "$('#distinct').val()"}

Все работает, как нужно. Спасибо что откликнулись.

EGORR 11.04.2009 22:26

Други мои! Растолкуйте и мне как получить ID из <li>.
Все по порядку...
Имею инпат
<input type="text" id="custSearch" value="" style="width: 200px;" />

В него autocomplete() добавляет результат запроса к БД.
PHP обработчик формирует вот такой список для input
foreach ($CustomList as $val) {
        echo $val['familia']." ".$val['cust_name']." ".$val['otchestvo']."|" .$val['customer_id']. "\n";
        }

На клиентской стороне, в списке <li>...</li> встречаю строку вида
Цитата:

Агапов Василий Михайлович|386
Все ясно: элемент [0] - ФИО, элемент [1] - айди записи.
Таперича мне надо получить по событию onItemSelect этот самый элемент [1] и передать его дальше, другому скрипту.
Исходя из мануала, о котором упоминал be3, его можно получить подобной функцией
function selectItem(li) {
    if( li == null ) var sValue = 'А ничего не выбрано!';
    if( !!li.extra ) var sValue = li.extra[1];
    else var sValue = li.selectValue;
    alert("Выбрана запись с ID: " + sValue);
}

Но у меня она ничего не сообщает. Молчит!
Что я не так делаю?
На всякий случай цитирую основной код.

$(document).ready(function(){


function liFormat (row, i, num) {
    var result = row[0] + '<p class=qnt>' + row[1] + ' тыс.чел.</p>';
    return result;
}
function selectItem(li) {
    if( li == null ) var sValue = 'А ничего не выбрано!';
    if( !!li.extra ) var sValue = li.extra[1];
    else var sValue = li.selectValue;
    alert("Выбрана запись с ID: " + sValue);
}

$(document).ready(function() {
	$("#custSearch").autocomplete(
		"customers/customers_list_for_search.php",
		{
    delay:10,
    minChars:2,
    matchSubset:1,
    autoFill:true,
    matchContains:1,
    cacheLength:10,
    selectFirst:true,
    formatItem:liFormat,
    maxItemsToShow:10,
    onItemSelect:selectItem
   
		}
	);

});

  }); //end readyfunction

be3 12.04.2009 06:46

Попоробовал ваш кусок кода, все работает или я не правильно понял проблему +)
http://be3.su/test.php

p.s. $(document).ready нужно писать только один раз +)

EGORR 12.04.2009 08:25

Цитата:

Попоробовал ваш кусок кода, все работает...
Странно...
Может проблема в браузере. Пробовал FF и IE7.
Буду думать...

EGORR 12.04.2009 13:14

Проблема решилась весьма просто.
Обновил файл query.autocomplete.js файлом взятым с LinkExchanger Blog.
И все встало на свои места.
У самых непонятных багов зачастую весьма банальные причины...

IMasikI 11.06.2009 08:27

Извините за повтор, но испытал все описанные способы, но переменную не получается передать, может подскажете в чем дело:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Тест автокомплита</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript" src="../lib/jquery.js"></script>
<script type='text/javascript' src='../jquery.autocomplete.js'></script>
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="stylesheet" type="text/css" href="jquery.autocomplete.css" />
<link rel="stylesheet" type="text/css" href="lib/thickbox.css" />
<script type="text/javascript">
$(document).ready(function() {
	var CTvalue;
	$("#counter_type").autocomplete('autocomplete_type.php', {
		delay: 100,
		minChars: 0,
		max: 12,
		autoFill: true,
		mustMatch: true,
		matchContains: false,
		scrollHeight: 220
	});
	$("#counter_number").autocomplete('autocomplete_number.php', {
		extraParams: {bar:CTvalue}
	});
});
</script>
</head>
<body>
<div id="content">
	<form autocomplete="off">
		<table>
			<tr>
				<td><label>Выбирите тип ПУ</label></td>
				<td><label>Выбирите No ПУ</label></td>
			</tr>
			<tr>
				<td><input type="text" id="counter_type" onchange="CTvalue=this.value" /></td>
				<td><input type="text" id="counter_number" /></td>
				<td><input type="submit" value="Найти" /></td>
			</tr>
		</table>
	</form>
</div>
</body>
</html>


Переменная bar не за какие коврижки не хочет передаваться:(

EGORR 11.06.2009 08:54

А если var CTvalue = $('#counter_type').val(); , то наверняка сработает...:)

IMasikI 11.06.2009 13:44

Этот способ тоже пробовал. Но может я чего не понимаю куда этот кусок вставлять?
Пробовал и функции писать, хоть это и первое мое столкновение с javascript. Смотря по алертам все работает, а как только переходишь в autocomplete_number.php, пишет undefined. Однако если передавать не переменную, то все работает.


Часовой пояс GMT +3, время: 11:13.