未捕获的TypeError:$(...)。autocomplete不是一个函数

时间:2015-11-02 13:29:26

标签: javascript jquery jquery-ui backbone.js autocomplete

我在Backbone.js项目中使用了很多文本字段的JQuery UI自动完成功能。库按正确顺序加载,如下所示,

define(['jquery','jquery-ui.min','jquery.ui.touch-punch']);

调用自动完成功能,如下所示:

$("#channelRspm").autocomplete({
 minLength: 3,
 delay: 1000,
 source: function(request, response) {
 var results = $.ui.autocomplete.filter(channel, request.term);
 response(results.slice(0, 10));
   }
});

问题是自动完成行为非常随机。在Chrome浏览器上运行源代码时,有时它可以完美运行。但是,有时我会在控制台中收到错误:
    未捕获的TypeError:$(...)。autocomplete不是函数

刷新html通常会让它再次起作用,但那时,这不是我想要的。有人可以建议我去哪儿吗?

1 个答案:

答案 0 :(得分:0)

您应该确保使用shim后加载

require.config({
  paths: {
    "jquery": "lib/jquery",
    "jquery-ui": "lib/jquery-ui",
    "underscore": "lib/underscore",
    "backbone": "lib/backbone"
  },
  shim: {
    "underscore": {
        exports: "_"
    },
    "backbone": {
        exports: "Backbone",
        deps: ["underscore", "jquery"]
    },
    "jquery-ui": {
        exports: "$",
        deps: ['jquery']
    }
  }
});

您需要以类似的方式将jquery-ui指定为jquery.ui.touch-punch的依赖项。

然后定义你的模块

define(['jquery','jquery-ui','jquery.ui.touch-punch']);