Почему моя пользовательская функция formatResult не вызывается с помощью плагина jQuery autoComplete? - PullRequest
0 голосов
/ 16 сентября 2009

Я использую плагин автозаполнения jQuery ( api doc ), который вызывает сервис, который возвращает json. У меня есть плагин, который отлично использует результат json, и все работает, за исключением моей пользовательской функции formatResult, которая никогда не вызывается. Я хотел бы использовать эту функцию для захвата выбора пользователя из списка результатов для заполнения других полей на странице.

$(document).ready(function() {
    $("#vendorname").autocomplete("/Vendor/Search", {
        dataType: 'json',
        parse: function(data) {
            var rows = new Array();
            for (var i = 0; i < data.length; i++) {
                rows[i] = { data: data[i], value: data[i].Name, result: data[i].Name };
            }
            return rows;
        },
        formatItem: function(row, i, n) {
            return row.RepName + ' (' + row.VendorId + ')';
        },
        formatResult: function(row, i, n) {
            return '(formatResult) ' + row.Name;
        },
        width: 200,
        mustMatch: false,
        scroll: true,
        scrollHeight: 300
    });
});

Строка json, возвращаемая службой: (два объекта Vendor)

[{"VendorId":1,"Name":"abc","RepName":"rep of abc","Phone":null,"Email":null,"Notes":null,"Version":null,"Fax":null,"ProductQuotes":[],"PurchaseOrders":[]},{"VendorId":2,"Name":"def","RepName":"rep of def","Phone":null,"Email":null,"Notes":null,"Version":null,"Fax":null,"ProductQuotes":[],"PurchaseOrders":[]}]

Итак,

1) Почему formatResult никогда не срабатывает?

2) Есть ли лучший способ получить свойства объекта после того, как пользователь выбрал элемент из результатов?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2009

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

 $("#vendorname").result(function(event, data, formatted){
   //do something
  });
0 голосов
/ 20 мая 2012

Обратите внимание, что formatResult и formatItem больше не работают / не существуют в автозаполнении ядра jQuery. Вместо этого я использовал комбинацию этого ответа и немного моего собственного кода. Вот код победы для меня. Эта конкретная функция заботится о значениях и метках, но вы можете поставить любую свою собственную функцию.

$(document).ready(function(){
    $('#TradeFromUserId').autocomplete({
        minLength: 3,
        source: '/my.json',
        select: function(event, ui {
            var selectedObj = ui.item;
            $('input#TradeFromUserId').val(selectedObj.label);
            $('input#TradeFromUserIdHidden').val(selectedObj.value);
            return false;
        focus: function(event, ui){
            var selectedObj = ui.item;
            $('input#TradeFromUserId').val(selectedObj.label);
            $('input#TradeFromUserIdHidden').val(selectedObj.value);
            return false;
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...