【问题标题】:jquery autocomplete this.source is not a function errorjquery autocomplete this.source 不是函数错误
【发布时间】:2011-03-19 13:06:16
【问题描述】:

我已经在输入字段上实现了自动完成功能,但是该框没有显示并且 firebug 返回“this.source is not a function”。我在同一页面的其他字段上使用了自动完成功能,没有任何问题。 (两个文本区域)。

我正在使用以下代码进行调试,如果我从脚本文件或 Firebug 命令行运行,效果相同。

var fakedata = ['test1','test2','test3','test4','ietsanders'];
$("#omschrijving").autocomplete(fakedata);

运行 jquery 1.4.2 和 jquery ui 1.8.2,都是缩小版本。

有没有人知道自动完成如何在文本区域上正常工作,但会导致输入出现故障?

错误和堆栈跟踪:

this.source is not a function
http://facturatie.autodealers.nl/dev/resources/js/jquery-ui-1.8.2.custom.min.js
Line 570
close(Object { name="a"})jquery....min.js (regel 570)
close(Object { name="a"}, Object { name="c"})jquery....min.js (regel 570)
response()

【问题讨论】:

  • 您使用的是哪个自动完成插件?有几种变体。
  • 你能在firebug中打开堆栈跟踪并发布发生这种情况的函数吗?
  • 我使用的是 jQuery UI 库 1.8.2 版本中捆绑的 jQuery UI 自动完成功能。处理堆栈跟踪
  • 我找到了答案,几乎尴尬地承认我只是以错误的方式实现它。

标签: javascript jquery jquery-ui


【解决方案1】:

就我而言,我有第二次导入 jquery,但我没有意识到。 比如:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"> </script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.devbridge-autocomplete/1.2.27/jquery.autocomplete.min.js"></script> 

// More code

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"> </script>

所以请务必在初始化 jquery 后导入自动完成脚本。

【讨论】:

    【解决方案2】:

    jquery.autocomplete.js 的末尾搜索以下部分:

    创建可链接的 jQuery 插件:

    $.fn.devbridgeAutocomplete = function (options, args) {....
    

    这个 devbridgeAutocomplete 是一个替代插件,可以使用以下行访问相同的功能:

    if (!$.fn.autocomplete) {
        $.fn.autocomplete = $.fn.devbridgeAutocomplete;
    }
    

    所以.. 你可以使用 devbridgeAutocomplete 代替 autocomplete 或通过更改此 $.fn.devbridgeAutocomplete

    的任何名称

    【讨论】:

      【解决方案3】:

      如果您将它与 jQuery UI 库一起使用,它还有名为 autocomplete 的插件。在这种情况下你可以使用插件别名devbridgeAutocomplete:

      $('.autocomplete').devbridgeAutocomplete({ ... });
      

      这解决了 jQuery UI 冲突的问题

      【讨论】:

      • 这应该得到更多的滴答声,因为这解决了我的问题。
      • 这也解决了我的问题。疯狂的。哦,Stack Overflow,我多么爱你(大部分时间)。
      【解决方案4】:

      tagedit/autocomplete 有类似的问题。看来您还想禁用自动完成功能。将源设置为 false 可以避免这些错误。

      解决办法:

      options.autocompleteOptions.source = false;
      

      【讨论】:

        【解决方案5】:

        如果您尝试使用来自 http://www.devbridge.com/projects/autocomplete/jquery/#demo 的自动完成功能,它现在会与 jQuery UI 中的自动完成方法发生冲突。我遇到了同样的问题,后来发现我可以只使用 jQuery UI 实现。

        (注意:此页面的文档似乎有误:http://docs.jquery.com/Plugins/Autocomplete#Setup

        【讨论】:

          【解决方案6】:

          正如 Shelton 所说,来自 devbridge.com (1.1.3) 的版本与 jQuery UI (1.8.4) 冲突。通过确保在 jQuery UI 版本之后加载 devbridge 版本来使其正常工作。

          【讨论】:

            【解决方案7】:

            答案是自动完成的第一个参数应该是一个包含“源”属性的对象。这行得通

            var fakedata = ['test1','test2','test3','test4','ietsanders'];
            $("#omschrijving").autocomplete({source:fakedata});
            

            【讨论】:

            • 没有那么尴尬,因为它在某些文档中说的不同。你怎么猜?
            • 另外,如果source 是一个带有键的对象,例如{ a:A, b:B, c:C },您可能会看到此错误或类似错误。应该只是单个值,如{ "A", "B", "C" }
            • 在我的例子中,`$(".div").autocomplete();` 我遇到了这个错误,因为类 .div 不存在
            猜你喜欢
            • 2020-03-23
            • 2015-04-30
            • 1970-01-01
            • 2013-11-04
            • 2012-06-13
            • 2017-11-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多