这个自动完成代码有什么问题(JQuery-UI AutoComplete)

时间:2011-12-08 20:13:04

标签: javascript jquery asp.net-mvc jquery-ui autocomplete

$("#Auto").autocomplete({
minLength: 4,
type: 'GET',
source: function (request, response) {
    var term = request.term;
    if (term in cache) {
        response(cache[term]);
        return;
    }
    var url = '<%=Url.Action("AutoComplete", "Thing", new {area = "Admin"}) %>' + "?terms=" + request.term;
    lastXhr = $.getJSON(url, request, function (data, status, xhr) {
        cache[term] = data;
        if (xhr === lastXhr) {
            response(data);
        }
    });
}
})
    .data("autocomplete")._renderItem = function (ul, item) {
          return $("<li></li>")
.data("item.autocomplete", item)
    .append("<a> Thingy1: " + item.Prop1 + " Thingy2: " + item.Prop2 + "<br>" + "</a>")
    .appendTo(ul);
      };

假设存在#Auto,Prop1和Prop2,并且有一个名为Thing的控制器。这确实适用于另一个页面但由于某种原因我在页面上出现此错误:

$("#Auto").autocomplete({minLength: 4, type: "GET", source: function (request, response);var term = request.term;if (term in cache) {response(cache[term]);return;}var url = '<%=Url.Action("AutoComplete", "Thing", new {area = "Admin"}) %>' + "?terms=" + request.term;lastXhr = $.getJSON(url, request, function (data, status, xhr) {cache[term] = data;if (xhr === lastXhr) {response(data);}});}}).data("autocomplete") is undefined

我已加载以下文件:

jquery-ui-1.8.2.custom.min.js
jquery-1.4.2.min.js
jquery.autocomplete.pack.js
jquery.ajaxQueue.js
jquery.bgiframe.min.js
thickbox-compressed.js
jquery-ui-1.8.2.custom.css
jquery-require.1.1.packed.js

加上其他一些自定义内容。

我有什么遗漏,或者我是否包含太多文件?

3 个答案:

答案 0 :(得分:1)

首先,清理你的代码(看起来很懒散和粘贴)并解释你想要做的事情会有所帮助。

然而,乍一看我可以看到你的错误说:

  

.data(“autocomplete”)未定义

这意味着页面上不存在名为“自动填充”的元素。 尝试更改

.data("autocomplete")

.data("#Auto")

如果您尝试存储自动完成控件中包含的数据以供日后使用。

答案 1 :(得分:0)

我不敢说特里的反应是错误的。您的代码不是元素选择器。 data函数用于检索已链接到HTML元素的数据对象。在您的情况下,您正在检索链接到ID为Auto的元素的数据。

var data = $("#Auto").data("autocomplete");
// data is now an object stored by the autocomplete plugin.

您的问题似乎意味着找不到包含密钥autocomplete的数据。我不确定除非你的自动完成脚本没有完成他们的工作,否则会发生这种情况。

答案 2 :(得分:0)

镝是错的,不是特里。以下是更改的来源链接:http://jqueryui.com/upgrade-guide/1.10/#removed-data-fallbacks-for-widget-names

对话框现在是ui-dialog,或uiDialog,自动完成现在是ui-autocomplete等等。