Помогите получить правильную информацию, передаваемую плагину Jquery Autocomplete для получения интерактивного результата - PullRequest
2 голосов
/ 20 сентября 2011

Итак, у меня проблема со следующим кодом.У меня есть массив, который отформатирован:

{label:movie, value:location} 

Следующий код будет показывать только метку в поле поиска и при нажатии использует эту информацию для создания URL.Мне нужно, чтобы передать значение поля из массива вместо метки.Я попытался изменить файл Suggestions.push (val.label) на Suggestions.push (val.value), и в этом случае URL-адрес щелчка работает, но URL-адрес отображается в строке поиска вместо метки.Я новичок в Jquery и Json, поэтому я действительно летаю вслепую.

$(function(){
    //attach autocomplete
    $("#to").autocomplete({
        minLength: 2,

        //define callback to format results
        source: function(req, add){

        //pass request to server
        $.getJSON("/movie.php?callback=?", req, function(data) {

                //create array for response objects
                var suggestions = [];

                //process response
                $.each(data, function(i, val){                                
                    suggestions.push(val.label);
                });

                //pass array to callback
                add(suggestions);
            });

        },
        focus: function (event, ui) {
            $(event.target).val(ui.item.label);
            return false;
        },
        select: function (event, ui) {
            $(event.target).val(ui.item.label);
            window.location = ui.item.value;
            return false;
        },
    });
});

1 Ответ

1 голос
/ 20 сентября 2011

Вы рядом. Вам не нужна постобработка, которую вы выполняете в обратном вызове success:

source: function(req, add){
    //pass request to server
    $.getJSON("/movie.php?callback=?", req, add);
},

Виджет автозаполнения может принимать массив объектов, если эти объекты имеют свойство label и / или value.

Поскольку вы предоставили оба в результате вашего вызова AJAX, вы должны получить желаемое поведение, вызвав функцию add непосредственно в качестве метода успеха вашего обратного вызова AJAX.

...