2012-06-10 68 views
2

我abviously失去了一些東西,但我不斷收到此消息,嘗試添加自動完成的文本框時:.autocomplete不是一個函數MVC4 - JQuery的自動完成 - .autocomplete不是一個函數

_layout(僅頭部分):

<head> 
<meta charset="utf-8" /> 
<title>@ViewBag.Title - My ASP.NET MVC Application</title> 
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
<meta name="viewport" content="width=device-width" /> 
<link href="../../Content/themes/base/jquery.ui.all.css" rel="stylesheet" type="text/css" /> 
<script src="../../Scripts/jquery-1.6.2.min.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery-ui-1.8.11.js" type="text/javascript"></script> 
@Styles.Render("~/Content/themes/base/css", "~/Content/css") 
@Scripts.Render("~/bundles/modernizr") 

指數:

<script type="text/javascript"> 
$(function() { 
    $("#searchTerm").autocomplete({ 
     source: "/Search/AutocompleteSuggestions", 
     minLength: 3, 
     select: function (event, ui) { 
      if (ui.item) { 
       $("#searchTerm").val(ui.item.value); 
       $("form").submit(); 
      } 
     } 
     }); 
}); 

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl }))' 
{ 
<input id="searchTerm" name="searchTerm" type="text" /> 
<input type="submit" value="Go" /> 
} 

我很確定Jquery插件沒有正確加載,但我看不出爲什麼!

回答

3

抓我的頭一個小時左右,我發現這個問題後,所以這裏有雲:

  1. 您必須添加您的javascript到@section腳本{}部分
  2. 我不得不包含以下軟件包: @ Scripts.Render(「〜/ bundles/jqueryval」) @ Scripts.Render(「〜/ bundles/jqueryui」)

MVC4附帶正確的JQuery文件,默認配置已包含必要的軟件包。

希望這可以幫助別人。

1

您似乎沒有包含jquery-ui-1.8.11.js腳本,這是定義autocompete方法的地方。你只包括jquery-1.6.2.min.js這是必需的,但還不夠。此外,我建議你使用束所需的腳本和樣式相結合,然後再縮小成降低帶寬和提高頁面加載時間單個文件:

<head> 
    <meta charset="utf-8" /> 
    <title>@ViewBag.Title - My ASP.NET MVC Application</title> 
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
    <link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Content/css")" rel="stylesheet" type="text/css" /> 
    <link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Content/themes/base/css")" rel="stylesheet" type="text/css" /> 
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")"></script> 
    <meta name="viewport" content="width=device-width" /> 
</head> 
+0

嗨達林, 添加缺少參考,但仍然沒有運氣。 (我也更新了片段) – Jacques

+0

使用FireBug檢查並確保所有腳本和樣式都正確加載,並且您沒有收到404錯誤。我建議你最大限度地簡化,只包含嚴格的最小腳本(jquery和jquery.ui),以便更輕鬆地縮小問題的範圍。也不要像你的例子那樣硬編碼網址。如果你不想使用包,至少使用url助手來確保url正確引用。一旦確保2個腳本被正確包含,請確保在JavaScript控制檯中沒有任何錯誤。無論如何調試你的代碼。 –

0

我敢肯定的是,jQuery插件沒有加載正確

如何知道jquery插件未正確加載?首先,您應該通過直接組合引用腳本/樣式並使用System.Web.Optimization幫助程序(@Scripts,@Styles ..)停止混淆事物。

使用任何一種方法。我建議你首先直接使用Url.Content加載所需的css和腳本,並看到一切正常,如果它然後完全用@Scripts@Styles替換它們。

要知道很多關於捆綁/縮小參照此鏈接

http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#_putting_asp_net_mvc_to_work

+0

嗨馬克, 感謝您的意見。這只是一個寵物項目,但我會牢記這一點。 – Jacques

0

在我的案例文件BundleConfig.cs正在註冊

bundles.Add(new ScriptBundle("~/bundles/jquery").Include("~/Scripts/jquery-{version}.js")); 

,它會導致使用jQuery UI的問題。我改爲:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include("~/Scripts/jquery-1.7.1.min.js")); 

它的工作原理。

相關問題