在使用带有Rails的Select2插件时未定义$,未捕获的ReferenceError

我正在尝试使用Select2插件向我的选择框添加搜索栏。

查看页面控制台时出现以下错误:

未捕获的ReferenceError:$未定义

在这里搜索不同的问题让我相信这个错误发生是因为在调用脚本之前没有包含或放置jQuery javascript。 但我仍然找不到让它发挥作用的方法。 如何修复此错误并使select2插件正常工作?

这是application.js文件:

//= require jquery //= require jquery_ujs //= require jquery-ui //= require jquery-fileupload/basic //= require jquery-fileupload/vendor/tmpl //= require select2 //= require tinymce //= require turbolinks //= require_tree 

我已经尝试以许多不同的方式在application.js文件中重新排列select2的顺序但没有成功(我试图确保在Select2之前加载jQuery)。

这是index.html.haml文件:

 %select{:id => "test"} - @lamps.each do |lamp| %option{:value => "1"}= lamp.brand + ' ' + lamp.category + ' ' + lamp.lamptype + ' (' + lamp.cct.to_s + 'K)' :javascript $(document).ready(function() { $("#test").select2(); }); 

这是application.html.haml文件:

 !!! 5 %html %head %title= t('.lspdd_light_spectral_power_dis') %meta{:name => "viewport", :content=>"width=device-width, user-scalable=no"} = stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true = javascript_include_tag "application", "data-turbolinks-track" => true, :defer => "defer" = javascript_include_tag "d3.min.js", :defer => "defer" = csrf_meta_tags 

附加信息:

  • Rails版本:4.0.3
  • ruby 1.9.3p484(2013-11-22修订版43786)[x86_64-linux]

谢谢!

编辑#1:

添加网络开发工具显示的信息的屏幕截图。

View post on imgur.com

如果我理解正确的应用程序-ea826f14bc5ea6f6976b187ce8d3008e.js文件包含application.js文件中提到的所有内容?

如果你已经//= require_tree包含所有脚本,请不要使用//= require_tree 。 这可能是错误的原因。 删除此字符串并尝试重新加载页面

ps我也认为你使用的是不正确的sintax

 //= require_tree 

正确的版本包含点

 //= require_tree . 

pps不是关于你的主要问题,但你使用旧版本的ruby。 检查新的

我之前没有提到过的一件更重要的事情 。 您正在使用defer="defer"属性来处理主脚本加载。 内联javascript你在主页脚本之前加载的页面上输入的内容