2013-02-22 145 views
2

爲什麼我的插件沒有加載? jquery和插件鏈接被引用。插件被稱爲.. ..請幫我找到我在代碼中缺少的東西。插入不加載

<script src="~/Scripts/jquery-1.7.1.js"></script> 
    <script src="~/Scripts/chosen.jquery.js"></script> 


    <select class="chzn-select" tabindex="1" style="width:350px;" data- 
    placeholder="Choose a Country"> 
     <option value=""></option> 
     <option value="United States">United States</option> 
     <option value="United Kingdom">United Kingdom</option> 
     <option value="Afghanistan">Afghanistan</option> 
     <option value="Albania">Albania</option>     
    </select> 

    <script> 

    $(document).ready(function(){ 
     $(".chzn-select").chosen(); 
    }); 

    </script> 

我收到螢火蟲錯誤:

TypeError: $(...).chosen is not a function

+0

檢查chosen.jquery.js是由頁面訪問的! – 2013-02-22 13:02:05

+0

有沒有可以測試的實時網址?這個問題顯然與不正確的目錄路徑有關。 – 2013-02-22 13:08:23

+1

夥計們,如果你想一次查看OP發佈的代碼片段,你會發現'.chosen'正在'$(document).ready();'內被調用。所以這意味着該函數只會在包含jQuery之後運行。所以這不是在jQuery之前包含'〜'或'.chosen'的問題。 – 2013-02-22 13:13:35

回答

3

閱讀註釋並搜索相關問題,我發現原因是因爲jQuery包含兩次。看看this

我創建了這個fiddle我從這裏選擇了cdn service

如果jQuery是包括僅比

一次
$(".chzn-select").chosen(); 

應該正常工作。

編輯:

而不是使用

$(document).ready(function(){ 
    $(".chzn-select").chosen(); 
}); 

嘗試

$(document).bind("pageinit", function() { 
    $(".chzn-select").chosen(); 
}); 
+0

我在firebug html中看到,它看起來像

1

不要在你的HTML(CSS)使用~。你只能在代碼隱藏中使用它。改用/scripts

+0

刪除了。但在螢火蟲中仍然有同樣的錯誤。 TypeError:$(...)。選擇不是函數 – EP2012 2013-02-22 13:00:21

+0

檢查控制檯是否加載了兩個腳本。 – Archer 2013-02-22 13:01:38

+0

你用Firebug來剖析網絡,你應該看到兩個腳本都加載進來。如果他們不能,你會看到和錯誤代碼 – Hawxby 2013-02-22 13:02:17

1

你的jquery和/或選擇的插件似乎沒有加載。

嘗試用替換它們:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script> 
<script src="/scripts/chosen.jquery.js" type="text/javascript"></script> 

同時確保chosen.jquery.js真的,如通過從源打開URL。或者在Firebug或任何其他開發人員控制檯中檢查您的網絡選項卡。如果顯示404,您的腳本不在正確的位置。

另外,還要確保你的頁面佈局是這樣的

<html> 
    <head> 
     <!-- your css files --> 
     <link/> 
    </head> 
<body> 
    <!-- Your html above javascript includes--> 
    <select> 
    .... 
    </select> 
    <!-- Inlcude your js files at the bottom --> 
    <script src="bla.js" /> 
    <script> 
     //your inline javascript goes below includes 

    </script> 
</body> 

1

我覺得射手指出了正確的問題,但我對解決方案的另一個建議:使用RegisterClientScriptIncludeexample

public void Page_Load() 
{ 
    var pageType = this.GetType(); 
    ClientScriptManager cs = Page.ClientScript; 

    if (!cs.IsClientScriptIncludeRegistered(pageType, "jQuery")) 
     cs.RegisterClientScriptInclude(pageType, "jQuery", ResolveClientUrl("~/Scripts/jquery-1.7.1.js")); 
    if (!cs.IsClientScriptIncludeRegistered(pageType, "jQuery.chosen")) 
     cs.RegisterClientScriptInclude(pageType, "jQuery.chosen", ResolveClientUrl("~/Scripts/chosen.jquery.js")); 
} 

這會在您的頁面頁眉元素中放置腳本標籤,這意味着您可以在頁面上刪除您的參考如果。它主要用於避免在未知虛擬目錄位置(在開發環境中通常是您的開發Web服務器下的目錄)下託管時出現問題。

0

這是因爲你的chosen.jquery.js加載之前的JQuery嘗試檢查你的路徑,如果你使用簡單的拖放和您的文件夾中的.js文件拖放到你的頁面,然後你不必擔心~