4

为什么我的插件加载不出来?引用了 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 不是函数

4

5 回答 5

5

阅读评论并搜索相关问题,我发现原因是因为 jQuery 被包含两次。看看这个

我创建了这个小提琴,我从中选择了这个cdn 服务

如果 jquery 只包含一次

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

应该可以正常工作。

编辑:

而不是使用

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

尝试

$(document).bind("pageinit", function() {
    $(".chzn-select").chosen();
});
于 2013-02-22T14:05:43.767 回答
2

您的 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确实包含在内。或者在 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>

于 2013-02-22T13:07:10.363 回答
1

不要~在您的 html (aspx) 中使用。您只能在代码隐藏中使用它。改用就好/scripts了。

于 2013-02-22T12:57:53.770 回答
1

我认为 Archer 指出了正确的问题,但我对解决方案有另一个建议:使用RegisterClientScriptInclude ( example )

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 服务器下的目录)下托管时出现问题。

于 2013-02-22T13:09:01.193 回答
0

这是因为您chosen.jquery.js在 JQuery 尝试检查您的路径之前正在加载,如果您使用简单的将 Js 文件从您的文件夹拖放到您的页面,那么您不必担心 ~

于 2013-02-22T13:09:43.353 回答