37

我想知道是否有人可以帮助我。我的引导下拉菜单突然停止工作。我不知道为什么。它以前工作过。我没有触及我的视图我的布局视图,所以我认为问题不存在。我很确定它与我的 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 .

我猜这可能与我的配置文件有关?

4

14 回答 14

108

不得不搬家

//= require jquery

以下

//= require bootstrap

之内

application.js
于 2012-04-19T06:17:39.170 回答
21

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

rake assets:clean

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

于 2012-09-05T14:47:49.007 回答
12

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

首先,让我告诉你我的设置:我按照引导站点上的说明下载了 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">

所以我//= require_tree .从 application.js 中删除了该行,重新启动了服务器,并且下拉菜单工作了!

然后我放回了这条线//= require_tree .,而是删除了文件 assets/bootstrap-dropdown.js,它再次起作用了!

于 2012-07-15T17:36:25.700 回答
3

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

对 application.js 的更改是否会触发某些缓存的重建,或者是问题根源的某些幕后进程?下次发生这种情况时,我将尝试对 application.js 进行一个简单的更改,看看是否有任何作用。

于 2012-05-31T13:37:05.110 回答
3

我在我的开发机器上遇到了这个问题,但我的生产服务器运行良好。我注意到,虽然在 application.js 中重新排序 js 需要修复开发中的问题(下拉菜单再次工作),但要小心,因为这会杀死我在生产中的下拉菜单。我不得不回去把它们放回原处,让生产重新开始工作。现在,我只是在需要时在 dev 中临时更改它们。

于 2012-10-28T14:26:22.260 回答
2

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

于 2012-06-12T11:55:47.170 回答
2

我也有这个问题......它与rails turbolinks有关。在初始页面加载时,下拉菜单不起作用,但在刷新后它们会起作用。而且,这是因为使用 turbo 链接时,某些 Dom 元素可能不会每次都被加载/重新加载。所以,我的下拉菜单停止工作(除其他外)。rails 4 对此的修复是添加 jquery.turbolinks gem https://github.com/kossnocorp/jquery.turbolinks。我发现(后来在一些博客中遇到)这个 gem 的一件事是 javascript 标记必须在头部内部。自述文件没有提到这一点......但是

于 2014-06-27T17:02:21.557 回答
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})
于 2013-11-27T22:47:02.860 回答
1

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

于 2018-04-12T05:13:40.970 回答
0

请参阅Rails 3.1 资产 - 开发中的奇怪服务

在 application.js 的调试模式中包含压缩版本的错误

于 2012-05-02T02:48:44.210 回答
0

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

放置正确的顺序并删除 public/assets 文件夹中的所有内容使其在开发中工作。

于 2012-07-03T10:34:18.117 回答
0

#5145最近为此关闭。该修复程序已恢复,但最后提供了一个特定于应用程序的解决方案,并且对我有用。确保也清除浏览器缓存。

于 2012-12-11T15:20:36.063 回答
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 ”中删除。

于 2015-01-10T16:49:29.607 回答
0

我遇到了这个错误,事实证明我的 CSS 阻止了下拉菜单的工作。

具体来说,我有“溢出:隐藏;” 在我的标题导航 CSS 中。删除它解决了这个问题。

于 2015-01-15T05:42:20.300 回答