.autocomplete 不是函数错误

Posted

技术标签:

【中文标题】.autocomplete 不是函数错误【英文标题】:.autocomplete is not a function Error 【发布时间】:2013-11-04 15:34:58 【问题描述】:

下面是我的代码

<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

而我的 html 代码是

<div class="ui-widget">
<input name="searcharea" class="selectarea" id="searcharea" type="text" value="" placeholder="Area">
</div>

我的功能是

<script>
$(function()
    $( "#searcharea" ).autocomplete(
        source: "suggestions.php"
    );
    $( "#searchcat" ).autocomplete(
        source: "suggestions1.php"
    );
);
</script>

我已将此页面包含在包含我网站搜索代码的单独文件中,并将其嵌入到各个页面上,在我的索引页面上,它建议我来自源文件的值,但在其他页面上它给了我打字错误上线

$( "#searcharea" ).autocomplete(

我的网站链接是: http://www.jodhpuryp.in/

这是我的自动建议框的来源 http://api.jqueryui.com/autocomplete/

谁能告诉我,为什么我在网站的其他页面上出现此错误,而它在索引页面上工作。感谢任何帮助。谢谢

【问题讨论】:

由于某种原因,jqueryui.js 没有加载到您的页面上。检查控制台中的错误。 我做到了,没有错误出现,唯一的错误是 TypeError 说未定义自动完成:| 你得到的代码应该可以工作:jsfiddle.net/5TSDG。检查您的脚本是否正确加载。 我发现搜索代码不仅适用于 registershop.php ,它适用于其余页面(相当宽慰) @RoryMcCrossan jqueryui.js 正在加载,我在控制台中看到了它。但它无法找到自动完成:S 【参考方案1】:

发现问题,我为我的谷歌翻译添加了另一个 jquery 文件,它们相互冲突,导致无法加载自动完成功能。

【讨论】:

老兄,我什至不能告诉你这有多大帮助。这么奇怪的错误。 这帮助我解决了。在我的布局页面中也有对 jQuery 的引用,我在页面级别再次添加。 我为此浪费了半天时间,结果发现另一个插件正在注入第二个 jQuery。他们的文档确实提供了一种无需额外 jQuery 即可加载库的方法。【参考方案2】:

听起来好像是在实际加载定义它的库之前调用了自动完成功能 - 如果这有意义吗?

如果您的脚本是内联的,而不是引用的,请将其移至页面底部。或者(我的首选)将脚本放在外部 .js 文件中,然后引用它:

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script src="yourNewJSFile"></script>

编辑:如果您将脚本外部化,请确保在它依赖的任何 JQuery 库之后引用它:)

【讨论】:

我正在按照您上面所说的顺序加载内容,也许这就是为什么它可以在除一个之外的所有页面上工作的原因。我还尝试了外部java文件方法。但它可以在所有页面上运行,除了我提到的那个:| 好的,朋友 - 我刚刚查看了您页面的来源。我的第一个建议是确保您的文档类型位于页面顶部。目前你有一些上面的东西。这可能会导致浏览器出现奇怪的错误。 建议采纳,晚上会更新:)【参考方案3】:

这很尴尬,但它让我呆了一段时间,所以我想我会在这里发布。

我没有安装 jQuery UI,只有经典的 jQuery,它不包括自动完成(显然)。添加以下标签可通过 jQuery UI 启用自动完成功能。

<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">

<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

值得注意的是,表单或表单块的 HTML 值 autocomplete="off" 将阻止浏览器执行方法 .autocomplete(),但不会阻止 jQuery UI 功能。

【讨论】:

感谢您选择分享此内容。这为我省去了一些麻烦:)【参考方案4】:

就我而言,我的另一个团队成员在添加 bootstrap.min.js 时包含了另一个版本的 jquery.js。去掉多余的jquery.js后,问题就解决了

【讨论】:

【参考方案5】:

可能是添加了多个jquery.js文件,出现冲突。

【讨论】:

传奇!确实存在一些合并冲突,并且碰巧添加了多个 jquery 库。【参考方案6】:

您在页面加载 jQuery 之前调用该函数。 始终建议在内部使用 jQuery

$(document).ready(function() //Your code here );

在你的情况下:

$(document).ready(function()
   $(function()
      $( "#searcharea" ).autocomplete(
         source: "suggestions.php"
      );
      $( "#searchcat" ).autocomplete(
         source: "suggestions1.php"
      );
   );
);

【讨论】:

【参考方案7】:

请注意,如果您未使用完整的 jquery UI 库,则可能会在您缺少 Widget、Menu、Position 或 Core 时触发。根据您的 jQuery UI 版本,可能会有不同的依赖关系

【讨论】:

【参考方案8】:

我的问题最终是 Visual Studio 捕捉到未处理的异常并阻止脚本进一步运行。因为我在 IDE 中运行,所以看起来好像没有问题。自动完成工作得很好。我添加了一个 try/catch 块,这让 IDE 很高兴。

 $.ajax(
            url: "/MyController/MyAction",
            type: "POST",
            dataType: "json",
            data:  prefix: request.term ,
            success: function (data) 
                try 
                    response($.map(data, function (item) 
                        return  label: item.Name, value: item.Name ;
                    ))
                 catch (err)  

            
        )

【讨论】:

【参考方案9】:

我在 ASP.net 中遇到了这个错误。 当我从 Visual Studio 运行应用程序时,它工作得很好,但是当我发布项目并对其进行测试时,我在 chrom Inspect 调试器中出现错误“自动完成不是一个函数”。 我发现两个环境之间的差异是由 web.config 中的定义引起的。在编译标签中。如果 assign debug="false" 那么所有的 bundel 定义都会被执行并且编译是作为一个版本完成的。如果 debug = true" 则编译用于不包括捆绑和缩小 js 库的调试阶段。 因此环境之间的差异。

<system.web>
    <compilation debug="false" targetFramework="4.5.1"/>
    <httpRuntime targetFramework="4.5.1"/>
</system.web>

此外,检查这两个环境,我发现调试环境无处不在 (_Layout.cshtml) @Scripts.Render("~/bundles/jquery") 在代码中,其中(在 APP_Start 下)BundleConfig.csbundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Static/js/lib/jquery-version.js", "~/Static/js/lib/jquery-ui.js"));

原来是这样的:

<script src="/Static/js/lib/jquery-1.12.4.js"></script>
<script src="/Static/js/lib/jquery-ui.js"></script>

和其他环境(debug = false)

<script src="/bundles/jquery?v=YOLEkbKJYtNeDq0o56xjzXWKoYzrF5Vkqgyc9Cb0YgI1"></script>

在调试模式下它可以工作,而另一个有问题。

在js库方面我看到了jquery-ui的两个文件:

jquery-ui.js jquery-ui.min.js

事实证明,它们都是来自新 mvc 项目模板的默认值。 当 jquery-ui.min.js 从库中删除后,问题就解决了。

我相信即使 jquery-ui.js 是在 BundleConfig.cs 中定义的,实际上 jquery-ui.min.js 被占用了。

顺便说一句,jquery-ui.min.js 没有包含与包含它的 jquery-ui.js 相对的自动完成功能。

干杯。

【讨论】:

稍后发现新的 mvc 项目确实包含 jquery-ui 但没有自动完成功能。因此进行了更新。但遗憾的是缩小版没有更新,所以没有自动补全功能。【参考方案10】:

如果您的页面有如下脚本部分,请确保您从该部分中引用您的 Jquery 库。

@section Scripts 
 
   <script src="~/Scripts/jquery-ui.js" type="text/javascript"></script>
 

【讨论】:

【参考方案11】:

当你看到这个问题时,总是把你的自动完成功能放在 keyup 功能中,并确保你已经添加了库

$( "#searcharea" ).keyup(function()
   $( "#searcharea" ).autocomplete(
      source: "suggestions.php"
   );
);

【讨论】:

能否请您提供另一种方法,它不起作用 $(document).delegate('#searcharea','keyup',function() $(this).autocomplete( source: "suggestions.php" ); );检查这个..【参考方案12】:

我遇到了同样的问题并尝试解决,但不幸的是它不再起作用了! 如果您面临同样的问题并且找不到解决方案,它可能会对您有所帮助。

如果在webpack中全局配置jquery/jquery-ui,需要像这样导入自动补全

import  autocomplete  from 'webpack-jquery-ui';

而且你必须在 html 的 head 部分包含 jquery-ui.css,我不明白为什么没有它它就不能工作!

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

希望您的问题能得到解决。

并确保包含/安装以下三个

    jquery-ui-css jquery-ui jquery

【讨论】:

在什么文件中添加“import autocomplete from...”? @AndrewKoper 你想在哪里使用自动完成。【参考方案13】:

Check the Sources-> Scripts in browser Inspect 工具。有时可以引用多个 jQuery 文件。在 ASP.NET MVC 中,这通常发生在布局页面已经有 jQuery 引用时。

【讨论】:

【参考方案14】:

在 Angularjs 库帮助我之前加载 jQuery 库。

<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
</head>

【讨论】:

【参考方案15】:

<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
</head>

【讨论】:

这不是答案。

以上是关于.autocomplete 不是函数错误的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 TypeError: $(...).autocomplete 不是 JQuery-UI 中的函数

自动完成“不是功能”

未捕获的TypeError:$(...)。autocomplete不是JQuery-UI中的函数

jQuery自动完成不是功能控制台错误

禁用输入字段自动填充(纯 JS)

如何禁用特定输入字段的自动填充