jQuery 插件无法正常工作...“类型错误:‘未定义’不是函数”

Sha*_*mar 1 javascript jquery ruby-on-rails-3.2

我有一个使用 jQuery 的 Ruby Rails 应用程序,并且正在尝试加载插件,但它不起作用;脚本以“正确”的顺序加载(即,jquery、jquery_ujs、插件、自己的脚本),但任何插件函数(特别是测试 NiceScroll 和 jScrollPane)都会失败,并显示“类型错误:‘未定义’不是函数”。在 Web Inspector 中,我可以看到插件脚本在 jQuery 脚本之后成功加载,但我根本无法让它工作。

jQuery 本身工作得很好,事实上 Turbolinks 和 jQuery Turbolinks 也工作得很好。然而,试图打电话给“$('.something').niceScroll ”(或任何其他插件)会产生上述类型错误。

这是我的 application.js:

//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require turbolinks
//= require jquery.turbolinks
//= require socket.io
//= require jquery.jscrollpane.min
//= require jquery.mousewheel
//= require auctions
Run Code Online (Sandbox Code Playgroud)

当放置在应用程序布局中时,会生成以下(部分)html:

<head>
  <title>Slamlaunch</title>
  <link href="/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css">
<link href="/assets/active_admin.css?body=1" media="all" rel="stylesheet" type="text/css">
<link href="/assets/auctions.css?body=1" media="all" rel="stylesheet" type="text/css">
<link href="/assets/marketing/marketing.css?body=1" media="all" rel="stylesheet" type="text/css">
<link href="/assets/patches.css?body=1" media="all" rel="stylesheet" type="text/css">
<link href="/assets/products.css?body=1" media="all" rel="stylesheet" type="text/css">
<link href="/assets/sessions.css?body=1" media="all" rel="stylesheet" type="text/css">
  <script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-transition.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-affix.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-alert.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-button.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-carousel.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-collapse.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-dropdown.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-modal.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-scrollspy.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-tab.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-tooltip.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-popover.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-typeahead.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap.js?body=1" type="text/javascript"></script>
<script src="/assets/turbolinks.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.turbolinks.js?body=1" type="text/javascript"></script>
<script src="/assets/socket.io.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.jscrollpane.min.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.mousewheel.js?body=1" type="text/javascript"></script>
<script src="/assets/auctions.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
  <meta content="authenticity_token" name="csrf-param">
<meta content="LzMLqv0Sb7+89JGe0U5x2ZGkECJ4l1gfbiD/81jFJD4=" name="csrf-token">
</head>
Run Code Online (Sandbox Code Playgroud)

另外,是的,在加载所有库之后很长时间,所有相关代码都会在 $(function(){}) 块或控制台中执行。

Par*_*rma 5

出现此问题的主要原因是脚本加载不正确,根据您的说法,这不是您的情况,
请尝试将所有代码放入

$(function(){
//your code
})
Run Code Online (Sandbox Code Playgroud)

还要检查 jquery 是否被下载两次

  • 我的 jquery 被下载了两次!谢谢帕尔夫和/或罗伯特! (2认同)