Не удается прикрепить значение формы к источнику автозаполнения Jquery - PullRequest
0 голосов
/ 06 апреля 2011

Я потратил много времени, чтобы добавить дополнительные параметры в Jquery-Autocomplete-Source. Но я не могу закончить это.

Что я пытаюсь сделать: у меня есть форма автозаполнения с источником данных jQuery. Если вы выберете что-то из автозаполнения, оно будет вставлено в таблицу (текст и скрытое поле с идентификатором) и запущена функция lesen (работает нормально). Функция lesen считывает значение каждого элемента с «классом» nutzerid (скрытое поле) в массив и помещает его в поле ввода - поле ввода является сборщиком для всех идентификаторов (работает!). НО! Автозаполнение должно прочитать значение этого поля и отправить его в качестве параметра в мой источник JSON. Но это не так. Консоль Firebug показывает пустой параметр. Даже если предупреждение может показать значение. Я действительно не знаю, что я делаю не так.

Я также пытался заменить поле ввода (сборщик всех идентификаторов) переменной. Но та же проблема возникает здесь. Я могу предупредить значение вар. Но попытка привязать его к источнику приводит к пустому параметру. Я также попытался задать значение для автозаполнения с помощью параметра extraparams. Нет успеха Я думаю, что есть проблема с присоединением к массиву. Может быть, шаг в lesen, где все идентификаторы помещаются в массив, а массив заполняется в форме. Но у меня нет идей, как это решить.

Почему я это делаю? Я хочу, чтобы исходный PHP JSON исключал уже выбранные идентификаторы в запросе MySQL. То, что было выбрано по предыдущим запросам, больше не должно отображаться с автозаполнением. Поэтому я должен опубликовать то, что было добавлено на страницу запроса ранее. И это путь (вероятно, не самый чистый), который я выбрал. Представьте себе корзину для покупок. Если товар добавлен в корзину, он не должен отображаться в будущих запросах. Конечно, я открыт для новых подходов.

<input type="text" id="ausschluss" />    
$(document).ready(
function() {



//this functions reads every hidden field (form the added items) an puts the array as string to a hidden field      
function lesen(){
            var itemsarray = [];
          $(".nutzerid").each(function () {
           var items = $(this).attr('value');
           itemsarray.push(items);
          });
          $( "#ausschluss" ).val(itemsarray);

          };


    //this function attaches the selection (from the autocomplete) to a table it creates text, a hidden field with the user id and a button
        function log( name, id ) {
            $("<tr> <td>"  + name + "<input class='Entf' type='button' value ='Entfernen' />" + "<input type='hidden' class='nutzerid' name='hiddenField' value='" + id + "' /></td></tr>").appendTo("#log");
            $( "#log" ).attr( "scrollTop", 0 );
            lesen();

                   }
//this is the autocompletepart
        $( "#REMOTE" ).autocomplete({
            source: "json.php?aus=" + $( "#ausschluss" ).val(), //this is not working. the firebug console shows an empty param (.php?aus=&term=blabla
            minLength: 2,
            select: function( event, ui ) {
                log(ui.item.value,ui.item.id);          
                alert($( "#ausschluss" ).val());  //this works! after selecting an item from the autocomplete it shows me the value of the field "ausschluss", like it should be appended to the source
                }

        });

//this one captures the click of a button. identified by the class and kills the <tr> <td> and all elemtns in it        
$('.Entf').live('click',function(event){
     $(this).parent().parent().remove();
     lesen();
   });




});

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Элемент управления автозаполнением jQueryUI - так же, как диалоговое окно - создается с помощью инициализатора $('#myElement').autocomplete().

Ваша проблема возникает из-за инициализации автозаполнения один раз с использованием $('#ausschluss').val(), который не был заполненеще.Автозаполнение не будет возвращаться к этому значению снова - оно эффективно кешируется.Вам нужно реорганизовать свой код, чтобы передать ausschluss в функцию как переменную, и затем эту функцию вызвать затем автозаполнением или (возможно, лучше), попробуйте установить источник на лету так:

$( "#REMOTE" ).autocomplete( "option", "source", 'json.php?aus=' + $('#ausschluss').val() );

Вы бы назвали это всякий раз, когда ваше значение ausschluss изменилось.

0 голосов
/ 30 декабря 2014

Я знаю, что сейчас уже поздно, но у меня была эта проблема, и я нашел это решение.

Если вы хотите иметь набор результатов автозаполнения на основе значения в другом поле в форме, вы можете сделать это:

$(document).ready(function(){
    $('#alpha').change(function(){setLibraryAutoComplete();});
    setLibraryAutoComplete();
});
function setLibraryAutoComplete(){
    $('#beta').autocomplete({source: "TypeAhead?param1=ABC&param2="+$("#alpha").val()});
}

Это устанавливает автоматическое заполнение при загрузке страницы со значением из поля, но затем также вызывает обновление автозаполнения при каждом изменении значения исходного поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...