Bootstrap 3下拉列表不适用于Rails 4和Turbolinks

我最近将我的站点升级到Bootstrap 3,并且正在浏览所有布局以更新类名和各种function以使其正常工作。 我最近的问题是下降似乎没有起作用。 起初我以为我没有正确地为我的导航栏实现代码,但在感到沮丧之后,我实际上试图摆脱我的导航栏并使用BS 3文档中的一个直接。 即使该代码也不起作用。 我已经研究了这个,我很确定我已经加载了所有正确的.js库。 这是我的application.js:

//= require jquery //= require bootstrap-sprockets //= require jquery.ui.datepicker //= require jquery.timepicker.js //= require jquery_ujs //= require turbolinks //= require bootstrap //= require jquery.remotipart //= require chosen-jquery //= require_tree . 

这是我的出现的内容:

                        

我在同一页面上有弹出窗口和其他可折叠项目,并且一切正常,所以我相当确定所有的.js都很机智。

我在其他地方读过,turbolinks可能会为Bootstrap 3造成问题,甚至尝试(然后放弃并恢复)jquery.turbolinks gem也无济于事。 不用说,我不知道如何在jsfiddle上重现这个(对不起)。

最后,我已经validation每次单击下拉列表时都会调用以下四个js函数,大概按以下顺序:

的jquery.js:4306

  eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events eventHandle.elem = elem; 

turbolinks.js:324

  installClickHandlerLast = function(event) { if (!event.defaultPrevented) { document.removeEventListener('click', handleClick, false); return document.addEventListener('click', handleClick, false); } }; 

tujquery.js:4306(再次)

turbolinks.js:324

  handleClick = function(event) { var link; if (!event.defaultPrevented) { link = extractLink(event); if (link.nodeName === 'A' && !ignoreClick(event, link)) { visit(link.href); return event.preventDefault(); } } }; 

任何线索可能会发生在这里以及如何解决它?

无需使用jquery-turbolinks即可解决此问题。 你需要先了解为什么会这样。 启用turbolinks并单击链接后,将触发一个page:change事件,并从新加载的html中重新评估所有javascript。

这包括在application.js加载的bootstrap javascript代码。 当bootstrap的javascript重新加载时,它会中断。 您可以通过在application.js 标记中使用data-turbolinks-eval=false来解决此问题。

对于再培训局:

 <%= javascript_include_tag 'application', 'data-turbolinks-eval' => false %> <%= javascript_include_tag params[:controller] %> 

对于SLIM:

 == javascript_include_tag 'application', 'data-turbolinks-eval': false == javascript_include_tag params[:controller] 

我回答了这个问题: turbolinks与bootstrap模式的问题

简而言之:你需要jquery-turbolinksgem。

通过在我的Bootstrap CDN链接中添加“data-turbolinks-eval”=> false,我能够解决问题。

 <%= javascript_include_tag "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js", "data-turbolinks-eval" => false %> 

你没有好好利用turbolinks。 turbolinks不应与资产一起使用。 使用turbolink的方法可以在这里看到: 在Rails中处理Turbolinks和JS不兼容性

你不应该改变任何javascript_links。 只需在App/assets/javascripts/application.js输入如下代码:

 //= require jquery //= require jquery.turbolinks //= require jquery_ujs // // ... your other scripts here ... // //= require turbolinks 

将jquery-turbolinks放入Gemfile之后。 引导需求应该介于jquery.turbolinks和turbolinks之间。

在twbs github上看到这个答案: https : //github.com/twbs/bootstrap-sass/issues/714