Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Функция autocomplete и зависимое поле (https://javascript.ru/forum/jquery/3657-funkciya-autocomplete-i-zavisimoe-pole.html)

kez 13.05.2009 10:14

Функция autocomplete и зависимое поле
 
За основу autocomplete используется пример
http://jquery.bassistance.de/autocomplete/demo/
Есть два поля
  1. раскрывающийся список - поставщики
  2. текстовое поле - контакты
Соответственно второе зависит от первого.
Суть задачи: при выборе поставщика и вводе в поле контакта текста происходила фильтрация по данному поставщику.
в раскрывающемся списке value у option это идентификаторы поставщиков
т.е.

Код:

...
<option value='1'>Поставщик 1</option>
<option value='2'>Поставщик 2</option>
<option value='3'>Поставщик 3</option>
...

есть код
Код:

$().ready(function() {

    $("input").click(function () {
        var first_id = null;
        var id = $(this).attr("id");
        var tableName = $(this).attr("accept");

        first_id = $("#OUIDCOUNTERAGENT option:selected").val();

        $(this).flushCache();

        if(tableName != ""){
            $(this).autocomplete("FilterAutoComplite", {
                delay: 300,
                cacheLength: 10,
                extraParams:{
                    tableName:tableName,
                    id:id,
                    first_id:first_id
                }
            });
        }
    });
});

Проблема возникла после изменения поставщика(т.е. выбора другого значения из списка). Функция как и следовало при onclick вызывается один раз, но когда ввожу значения в поле контакта запрос идет к идентификатору не только текущего поставщика, но и всем что выбирались ранее(видно по логу на сервере). хотя в функцию autocomplete он заходит один раз и идентификатор соответствует тому что нужно. в какую сторону капать?

kez 13.05.2009 14:45

Добавил перед
$(this).autocomplete("FilterAutoComplite", ...
отчистку кэша
$(this).flushCache();
Результат тот же.

x-yuri 13.05.2009 15:19

1) что выдает
alert([ableName, id, first_id ]);

2) php-script?

kez 13.05.2009 15:58

выдает правильные параметры.
в том то и дело что при он-клике идет одно обращение и правильно меняет параметры. т.е. как будто jQuery запоминает подписчиков(тех кто опрашивает сервер) и создает новый экземпляр подписчика на каждый онклик. при этом при попытке получить данные срабатывают хаотично все подписчики.

e1f 13.05.2009 15:58

Цитата:

cacheLength: 10
Часом не оно?

kez 13.05.2009 16:02

нашел какой то пример
http://skolman.az.pl/jquery/autocomplete.html
но я уверен что он работает некорректно т.к. метод getStockId(в примере) вызывается только один раз.

kez 13.05.2009 16:03

Цитата:

Сообщение от e1f (Сообщение 18789)
Часом не оно?

нет. кэш мне как раз не нужен по этому установлен в единицу.
нужно что бы при изменении поставщика изменялся и список.

kez 13.05.2009 16:05

Цитата:

Сообщение от x-yuri (Сообщение 18782)
1) что выдает
alert([ableName, id, first_id ]);

2) php-script?

хоть это и не принципиально
сервер написан на яве.
на клиенте яваскрипт

x-yuri 13.05.2009 16:40

Цитата:

в том то и дело что при он-клике идет одно обращение и правильно меняет параметры. т.е. как будто jQuery запоминает подписчиков(тех кто опрашивает сервер) и создает новый экземпляр подписчика на каждый онклик. при этом при попытке получить данные срабатывают хаотично все подписчики
одно обращение куда? Какие параметры меняются?

p.s. посмотри в firebug'е, какая информация передается между сервером и клиентом

kez 13.05.2009 16:50

при клике на поле контакта, которое должно быть заполнено автокомплитом. при клике на поле функция
Код:

$(this).autocomplete("FilterAutoComplite", { ...
вызывается один раз с верными параметрами, на сервер передается куча запросов, включая идентификаторы поставщиков, которые выбирались ранее.


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