为什么我的自定义formatResult函数不是使用jQuery autoComplete插件调用的?

时间:2009-09-16 19:02:22

标签: jquery autocomplete

我正在使用自动完成jQuery插件(api doc)来调用返回json的服务。我有插件消耗json结果很好,一切正常,execpt我的自定义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 个答案:

答案 0 :(得分:2)

格式结果只会更改文本框中显示的内容。如果要拦截对输入值的更改,请执行

 $("#vendorname").result(function(event, data, formatted){
   //do something
  });

答案 1 :(得分:0)

请注意,{j}核心自动完成中formatResultformatItem似乎不再起作用/存在。相反,我使用了this reply和我自己的一些代码的组合。这是我的获奖代码。这个特殊的功能负责处理值和标签,但你可以放置自己的任何功能。:

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