twitter bootstrap下降突然无法正常工作

时间:2012-04-18 21:51:20

标签: ruby-on-rails drop-down-menu twitter-bootstrap

我想知道是否有人可以帮助我。我的引导下拉菜单突然停止工作。我不知道为什么。它以前工作。我没有触摸我的观点我的布局视图所以我认为问题不存在。我很确定它与我的javascript有关,但我不知道它来自哪里。

我的宝石文件是......

gem 'rails', '3.2.3'
gem 'bootstrap-sass', '2.0.1'
gem 'bcrypt-ruby', '3.0.1'
gem 'faker', '1.0.1'
gem 'will_paginate', '3.0.3'
gem 'bootstrap-will_paginate', '0.0.5'
gem 'devise'
gem 'carrierwave'
gem 'rmagick'
gem 'delayed_job_active_record'
gem 'daemons'
gem 'make_voteable'
gem 'admin_data'
gem 'indextank'

我的application.js是......

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require bootstrap-dropdown
//= require bootstrap
//= require_tree .
猜测也许它与我的配置文件有某种关系?

14 个答案:

答案 0 :(得分:108)

不得不搬家

//= require jquery

下面

//= require bootstrap

中的

application.js

答案 1 :(得分:21)

如果预编译资产不起作用,请尝试删除预编译资产

rake assets:clean

我发现下拉js被加载到资产管道两次似乎立即打开和关闭下拉菜单,但在Heroku / Production中可以正常工作。

答案 2 :(得分:12)

我遇到了同样的问题,我找到了两种解决方法。

首先,让我告诉你我的设置:我按照bootstrap网站上的说明操作,然后下载了bootstrap-dropdown.js。我把它放在资产/ javascripts中。 我的application.js文件如下所示:

//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require_tree .

下拉列表不起作用。

我在页面源代码中注意到bootstrap-dropdown.js的脚本标签出现了两次:(为了简洁,我删除了无关的东西)

<script type="text/javascript" src="/assets/jquery.js?body=1">
<script type="text/javascript" src="/assets/jquery_ujs.js?body=1">
<script type="text/javascript" src="/assets/twitter/bootstrap/bootstrap-dropdown.js?body=1">
<script type="text/javascript" src="/assets/twitter/bootstrap/bootstrap-scrollspy.js?body=1">
<script type="text/javascript" src="/assets/twitter/bootstrap.js?body=1">
<script type="text/javascript" src="/assets/bootstrap-dropdown.js?body=1">
<script type="text/javascript" src="/assets/bootstrap.js?body=1">

所以我从application.js中删除了行//= require_tree .,重新启动了服务器,下拉列表工作正常!

然后我放回了行//= require_tree .,取而代之的是删除文件assets / bootstrap-dropdown.js,然后再次工作了!

答案 3 :(得分:3)

我不明白这一点,但重新排序// =需要jquery和// = require bootstrap似乎已经为我解决了两次问题。首先在jquery上面移动bootstrap,因为Sasha建议修复它。然后我做了更多的工作并准备使用jruby on rails 3.2.3进行部署。预编译资产,warble和下拉菜单在开发和生产中都不起作用。删除公共/资产,以及tmp中的一些.class文件和文件。没有效果。最后,我将application.js中的顺序移回到最后一次失败事件之前的状态,即在引导程序之前的jquery,并再次显示下拉列表。

对application.js的更改是否会触发某些缓存的重建,或者是幕后问题的某些过程?下次发生这种情况时,我会尝试对application.js进行一些微不足道的更改,看看是否有任何效果。

答案 4 :(得分:3)

我在我的开发机器上遇到过这个问题,但是我的生产服务器运行正常..我注意到在重新排序js需要在application.js中修复开发中的问题(下拉菜单再次工作),小心因为这会导致我的下拉列表在生产中。我不得不回去把它们放回去让生产再次工作的方式。现在我只是在我需要的时候暂时改变它们。

答案 5 :(得分:2)

再次预编译资产为我解决了问题

答案 6 :(得分:2)

我也有这个问题......而且它与rails turbolinks有关。在初始页面加载时,下拉列表将不起作用,但在刷新之后它们将会起作用。并且,这是因为使用turbo链接时,一些Dom元素可能不会每次都被加载/重新加载。所以,我的下降停止了持续工作(除其他外)。导轨4修复此问题是添加jquery.turbolinks gem https://github.com/kossnocorp/jquery.turbolinks。我找到的这个宝石的一件事(后来在一些博客中出现)是javascript标签必须在头脑中。自述文件没有提到这个......但是

答案 7 :(得分:1)

我找到了另一种选择!所有这些解决方案对我都没有用。而不是在点击时触发下拉列表,而是让它在悬停时触发。在脚本标签中放在页面底部。代码来自:http://codedecoder.wordpress.com/2013/10/21/bootstrap-drop-down-menu-not-working-rails/

$(document).ready(function(){
    $('.navbar .dropdown').hover(function() {
        $(this).find('.dropdown-menu').first().stop(true, true).delay(250).slideDown();
    }, function() {
        $(this).find('.dropdown-menu').first().stop(true, true).delay(100).slideUp()
    });
n})

答案 8 :(得分:1)

还要确保您的application.js中没有//require bootstrap-sprockets。我评论说它对我有用。

答案 9 :(得分:0)

请参阅Rails 3.1 Assets - Strange Serving in Development

有一个错误,压缩版本包含在application.js

的调试模式中

答案 10 :(得分:0)

预编译资产不起作用。 在jquery开发之前进行下拉,但不是在生产中 删除下拉列表仍然在开发中:-O

正确的顺序并删除公共/资产文件夹中的所有内容使其在开发中工作。

答案 11 :(得分:0)

票据#5145最近因此而关闭。该修复程序已恢复,但最终提供了一个特定于应用程序的解决方案,并且对我有用。请务必清除浏览器缓存。

答案 12 :(得分:0)

//= require jquery移至//= require bootstrap以下并将gem 'bootstrap-sass'升级至 2.3.0.1 ,解决了我的问题。

我想添加上面提到的解决方案仅适用于Localhost但不适用于Heroku。 在我的案例中,两者的解决方案是:

//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .

gem bootstrap-sass 2.3.0.1

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>需要在里面 “ _header.html.erb ”并从“ application.html.erb ”中删除。

答案 13 :(得分:0)

我遇到了这个错误,结果发现我的CSS阻止了下拉工作。

特别是我'溢出:隐藏;'在我的标题导航CSS中。删除它解决了这个问题。