Jquery: отправка дополнительных параметров с автозаполнением - PullRequest
1 голос
/ 31 марта 2011

Я создал php, который возвращает JSON для автозаполнения.пример: [{"value": "david schuun", "id": "120"}]

Теперь я хочу расширить функцию автозаполнения для передачи дополнительных параметров в этот php.

$( "#REMOTE" ).autocomplete({
            source: "json.php",
            minLength: 2,
            extraParams: {aus: 'eins'} ,          // this should work like "www.bla.de/json.php?aus=eins   " but it doesn't 
            select: function( event, ui ) {
                log(ui.item.value,ui.item.id);
            }

        });

Тестирование через URL работает нормально.Сценарий PHP в порядке.Но я не знаю, почему Jquery не работает.

Хорошо, вот весь сценарий:

<script>
$(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();
   });




    });
    </script> 

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

Я действительно запутался в этой проблеме.Я не профессионал JS.Но я не могу понять, почему эта штука не работает !!!!!!!

Ответы [ 3 ]

1 голос
/ 31 марта 2011

Вы можете просто поместить дополнительные параметры прямо в «источник». Это может быть не самое чистое решение, но оно должно работать.

$( "#REMOTE" ).autocomplete({
    source: "json.php?aus=eins",
    minLength: 2,
    select: function( event, ui ) {
        log(ui.item.value,ui.item.id);
    }
});

С другой стороны, плагин, который вы, похоже, используете, устарел, по словам его создателя

Примечание (2010-06-23): этот плагин устарел и больше не разрабатывается. Его преемник является частью jQuery UI

Так что я бы порекомендовал получить автозаполнение Jquery UI

ОБНОВЛЕНИЕ: (обновление ответа для включения новых требований)

Так что, если это HTML, мы имеем:

<input id="REMOTE" />
<input id="ausschluss" type="hidden" value="test" />

Это javascript, который нам понадобится:

$(function() {
    $( "#REMOTE" ).autocomplete({
        source: "json.php?aus=" + $( "#ausschluss" ).val(),
        minLength: 2,
        select: function( event, ui ) {
            log(ui.item.value,ui.item.id);
        }
   });
});

Вот скрипка, которая показывает, что часть javascript работает: http://jsfiddle.net/43Cur/

Если вы посмотрите на консоль firebug, вы увидите, что для запрошенного адреса заданы правильные параметры (json.php? Aus = test & term = dd)

1 голос
/ 22 декабря 2011

Вы также можете использовать вызов JSON в качестве источника данных и построить параметры таким образом.Я начал это делать, но я думаю, что могу пойти первым путем - просто создать исходный URL через javascript и передать его.Этот пример взят со страницы примеров jquery ui: http://jqueryui.com/demos/autocomplete/#remote-jsonp

        $( "#city" ).autocomplete({
        source: function( request, response ) {
            $.ajax({
                url: "http://ws.geonames.org/searchJSON",
                dataType: "jsonp",
                data: {
                    featureClass: "P",
                    style: "full",
                    maxRows: 12,
                    name_startsWith: request.term
                },
                success: function( data ) {
                    response( $.map( data.geonames, function( item ) {
                        return {
                            label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
                            value: item.name
                        }
                    }));
                }
            });
        },
        minLength: 2,
        select: function( event, ui ) {
            log( ui.item ?
                "Selected: " + ui.item.label :
                "Nothing selected, input was " + this.value);
        },
        open: function() {
            $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
        },
        close: function() {
            $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
        }
    });
0 голосов
/ 31 марта 2011

Вы пробовали это?

$( "#REMOTE" ).autocomplete({
        source: "json.php",
        minLength: 2,
        data: {aus: 'eins'} ,          // this should work like "www.bla.de/json.php?aus=eins   " but it doesn't 
        select: function( event, ui ) {
            log(ui.item.value,ui.item.id);
        }

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