Javascript Can';t将jQuery结果分配给变量

Javascript Can';t将jQuery结果分配给变量,javascript,jquery,ruby-on-rails,ruby,Javascript,Jquery,Ruby On Rails,Ruby,我正在开发一个RubyonRails应用程序,我想使用一个名为gentelella的仪表板。这个 该模板在简单的HTML格式中工作得非常完美。但当我将所有内容转移到Rails应用程序时,它就变得毫无吸引力了。我的意思是我不能点击侧边栏菜单项。 问题出在它的custom.js文件中。 它将边栏菜单分配给这样一个变量 $SIDEBAR_MENU = $('#sidebar-menu') 然后向其附加一个“单击”事件,如下所示: $SIDEBAR_MENU.find('a').on('click',

我正在开发一个RubyonRails应用程序,我想使用一个名为gentelella的仪表板。这个 该模板在简单的HTML格式中工作得非常完美。但当我将所有内容转移到Rails应用程序时,它就变得毫无吸引力了。我的意思是我不能点击侧边栏菜单项。 问题出在它的custom.js文件中。 它将边栏菜单分配给这样一个变量

$SIDEBAR_MENU = $('#sidebar-menu')
然后向其附加一个“单击”事件,如下所示:

$SIDEBAR_MENU.find('a').on('click', function(ev) {

     console.log('clicked - sidebar_menu');
}
问题是,如果我保持原样(在我的Rails应用程序中),它永远不会出现“clicked-sidebar_menu”控制台消息,因此菜单根本不起作用。 但如果我将日志跟踪放在前面:

  console.log($SIDEBAR_MENU);   
  $SIDEBAR_MENU.find('a').on('click', function(ev) 
我在输出中得到这个

jQuery.fn.init{上下文:文档,选择器:“#侧栏菜单”} 上下文 : 文件 选择器 : “#侧边栏菜单” proto : 对象(0)

所以我确信它实际上被分配给了一个变量,它肯定不是空的

然后我将所有出现的$SIDEBAR_菜单替换为$(“#SIDEBAR MENU”) 得到这个

$('#sidebar-menu').find('a').on('click', function(ev) {
    alert('it works now!');
}
它开始工作的很好。这已经让我心烦意乱了, 我就是找不到任何合理的解释。谁能解释一下为什么会这样

p、 我正在使用Rails 5.0.2和jQueryV1.12.4(来自Gems) 抱歉,如果像这样的主题已经存在,我已经搜索了答案,但找不到

下面是application.js的内容

  //= require jquery
//= require jquery_ujs
//= require bootstrap
//= require turbolinks
//= require fastclick
//= require nprogress
//= require Chart.min
//= require gauge.min
//= require bootstrap/bootstrap-progressbar
//= require icheck.min
//= require skycons
//= require jquery.flot
//= require jquery.flot.pie
//= require jquery.flot.time
//= require jquery.flot.stack
//= require jquery.flot.resize
//= require jquery.flot.orderBars
//= require jquery.flot.spline.min
//= require curvedLines
//= require date-ru-RU
//= require jquery.vmap.min
//= require jquery.vmap.world
//= require jquery.vmap.sampledata
//= require moment.min
//= require bootstrap/daterangepicker
//= require custom

我刚刚找到了造成这种奇怪行为的原因。 在详细查看Gentelella的源代码后,我注意到所有脚本标记都位于页面底部。 因此,我更改了页面的Rails模板,使其在正文之后也包含它们

<!DOCTYPE html>
<html>
  <head>
    <title>No Matter</title>
    <meta name="viewport" content="width=device-width, initial-scale=1 maximum-scale=1, user-scalable=no">
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'dashboard', media: 'all', 'data-turbolinks-track': 'reload' %>

  </head>

  <body class="nav-md"> 
    <%= yield %>
  </body>
   <%= javascript_include_tag 'dashboard', 'data-turbolinks-track': 'reload' %>
</html>

不管怎样

现在一切都好了。我不知道为什么会发生这种情况,因为Gentelella的“custom.js”中有一个$(document).ready()回调,它初始化了所有内容,整个菜单从一开始就在那里,没有动态加载任何内容。如果有人能解释一下原因,我将不胜感激,因为我自己是web开发的新手

将变量边栏菜单设置为字符串“#边栏菜单”,而不是使用该选择器将其设置为jquery对象。例如,变量侧栏菜单=“#侧栏菜单”。然后尝试$(侧边栏菜单)。查找…你能发布你的
应用程序.js
文件吗?试着调试你的资产,这在新的Rails 5应用程序中运行良好。@bkunzi01我不需要它。这与在所有事件中使用$(“#侧边栏菜单”)相同。问题是,在搜索元素内部的任何内容之前,它总是使用动态搜索元素it@thaleshcv是的,当然。在我的第一篇文章中添加了它的内容