2012-08-08 75 views
8

在我application.html.erb,我有以下几点:的Rails:引导和下拉不工作

<head> 
    <title><%= title %></title> 
    <%= stylesheet_link_tag "application", media: 'all' %> 
    <%= javascript_include_tag "application" %> 
    <%= javascript_include_tag "https://js.stripe.com/v1/", "application" %> 
    <%= csrf_meta_tags %> 
    <%= tag :meta, :name => "stripe-key", :content => STRIPE_PUBLIC_KEY %> 
    <%= javascript_include_tag "http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js", "application" %> 
    <%= render 'layouts/shim' %> 
</head> 

在我的Gemfile,我有以下几点:

gem 'twitter-bootstrap-rails' 
gem 'bootstrap-datepicker-rails' 

在我的意见\ layouts_header.html.erb,我有: Admin_menu =有:

<li class="dropdown" id="admin_menu"> 
    <a class="dropdown-toggle" data-toggle="dropdown" data-target="#admin_menu"> 
     <%= ADMIN_TITLE %> 
     <b class="caret"></b> 
    </a> 
    <ul class="dropdown-menu"> 
     <% Admin_menu.each do |menu_text, menu_action| %> 
      <li><a href="<%= menu_action %>"><%= menu_text %></a></li> 
     <% end %> 
    </ul> 
    </li> 

Admin_menu如别处定义h.new Admin_menu [ “期刊论文”] = “/论文” Admin_menu [ “曲目”] = “/磁道” Admin_menu [ “出席”] = “/出勤”

当我点击插入符,什么都没发生。我检查了HTML代码,并选择了下拉菜单。

任何想法?

+0

当您点击下拉菜单(或在此之前,例如页面加载时)时是否出现任何Javascript错误? 另外,是否有一个原因,你包括你的'application.js'三次?您已在所有'javascript_include_tag'调用中引用它 - 您只需要它一次。我很确定这不会导致这个问题,但它不会修复。 – BaronVonBraun 2012-08-08 15:47:26

+0

是的,你说得对。我清理了application.js包括。我没有看到任何javascript错误。当我悬停在上面时,脱字符号从灰色变成黑色,但没有任何反应。当我将鼠标悬停在管理菜单上时,选择器也不会变成手形。 – EastsideDeveloper 2012-08-08 16:19:25

+0

尝试将'href =“#”'添加到下拉链接本身(具有'dropdown-toggle'类的链接)。 – BaronVonBraun 2012-08-08 16:21:44

回答

13

您需要更改这些行:

<%= javascript_include_tag "application" %> 
<%= javascript_include_tag "https://js.stripe.com/v1/", "application" %> 
<%= javascript_include_tag "http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js", "application" %> 

这样:

<%= javascript_include_tag "https://js.stripe.com/v1/" %> 
<%= javascript_include_tag "application" %> 

您当前的代码中包含多次application.js,这对Bootstrap的下拉代码是个问题。如果你在你的application.js文件看我敢打赌,你会看到这个靠近顶部:

//= require bootstrap 

这将意味着你每次包括的application.js时间一旦加载引导,然后再从github上。

如果您阅读Bootstrap的Dropdown JS代码,您会看到它将点击侦听器添加到切换的下拉菜单中。如果你运行这段代码两次,你将添加两个点击监听器。所以在每次点击时,这两个听众打开菜单并突然关闭它。

我有一个类似于你的问题,我没有注意到我的javascript_include_tag条纹也重新包括application。我想我们可能从同一个地方复制/粘贴!

+0

谢谢。这工作! – EastsideDeveloper 2012-08-31 15:08:13

+1

它也包括了我的两次javascript。经过多次搔抓之后,我在应用程序布局的底部也找到了javascript_include_tag。 – 2012-09-13 19:32:00

+0

你有没有机会在你的应用中加入turbolinks?我从application.js中删除了它,它解决了我的问题。 – 2013-07-02 21:32:02

0

使用Firebug或Chrome扩展在浏览器中检查html。如果它是不正确尝试使用助手,以避免与字符串搞乱:

<li><%= link_to menu_text, menu_action %></li>

+0

在我的问题中,我提到HTML很好,下拉菜单选择在那里。 – EastsideDeveloper 2012-08-08 16:21:02