jQuery UI Autocomplete与deferred.promise()不兼容?

时间:2011-03-23 13:48:11

标签: javascript jquery ajax autocomplete deferred-query

我的目标是构建一个自动完成元素,该元素基于当前输入从SQL数据库中提取。这是必要的,因为被搜索的元素数量远远超过了json解串器的最大容量。

我使用smartAutoComplete插件,但我想整合并使用jQuery UI自动完成插件。似乎插件在我的源函数返回任何内容之前调用._renderMenu,并且没有任何内容被附加到页面主体。我在使用smartAutoComplete时使用deferred.promise()修复此问题,但jQuery UI似乎不喜欢这个解决方案。有小费吗?谢谢!

$("input#punch_box").autocomplete({
    source: function (request, response) {
        var dfd = new jQuery.Deferred();
        var resArr = [];
        MyAjax({
            url: '../GetMemberFiltered',
            data: { search_string: request.term },
            success: function (data, status) {
                $(data).each(function (indx, result) {
                    resArr.push({ value: result.first_name + " " + result.last_name + " " + result.email,
                        member_id: result.member_id
                    });
                });
                dfd.resolve(resArr);
            }
        });
        return dfd.promise();
    },
    delay: 200
});

function monkeyPatchAutocomplete() {
    var oldFn = $.ui.autocomplete.prototype._renderItem;

    $.ui.autocomplete.prototype._renderItem = function (ul, item) {
        alert(item.value);
        return $("<li></li>")
            .data("item.autocomplete", item)
            .append("<a>" + item.value + "</a>")
            .appendTo(ul);
    };
};

1 个答案:

答案 0 :(得分:0)

我能够从这里找到的代码拼凑出可行的解决方案:Jquery Autocomplete not showing results

延期项目很酷但不是正确的方法。