在我的application.html.erb中,我有以下内容:
<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'
在我的views \ layouts_header.html.erb中,我有:
<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在别处被定义为: Admin_menu = Hash.new Admin_menu [“论文”] =“/论文” Admin_menu [“曲目”] =“/曲目” Admin_menu [“出席”] =“/出席”
当我点击插入符号时,没有任何反应。我检查了HTML代码,下拉菜单选项就在那里。
有什么想法吗?
答案 0 :(得分: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时都会加载一次bootstrap,然后再从github加载。
如果您阅读了Bootstrap的Dropdown JS代码,您会看到它为切换下拉菜单添加了一个点击监听器。如果您运行此代码两次,则添加两个单击侦听器。所以在每次点击时,这两个听众都会打开菜单并突然再次关闭它。
我遇到了与您类似的问题,我没有注意到我的javascript_include_tag
Stripe也重新包含application
。我想我们可能会从同一个地方复制/粘贴!
答案 1 :(得分:0)
使用Firebug或chrome扩展程序检查浏览器中的html。如果不正确,请尝试使用帮助程序以避免弄乱字符串:
<li><%= link_to menu_text, menu_action %></li>