gpt4 book ai didi

jquery - Bootstrap 3 下拉菜单不适用于 Rails 4 和 Turbolinks

转载 作者:行者123 更新时间:2023-12-03 22:20:38 26 4
gpt4 key购买 nike

我最近将我的网站升级到 Bootstrap 3,并且正在检查所有布局以更新类名称和各种功能以使其正常工作。我最近遇到的问题是下拉菜单似乎不起作用。起初,我以为我没有正确实现导航栏的代码,但在感到沮丧之后,我实际上尝试摆脱我的导航栏并直接使用 BS 3 documentation 中的导航栏。 。即使该代码也不起作用。我已经研究过这一点,并且相当确定我已加载所有正确的 .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 .

这是我的 <head> 中出现的内容:

  <script data-turbolinks-track="true" src="/assets/jquery.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/affix.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/alert.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/button.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/carousel.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/collapse.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/dropdown.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/tab.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/transition.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/scrollspy.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/modal.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/tooltip.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap/popover.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap-sprockets.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.core.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.ui.datepicker.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.timepicker.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery_ujs.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.iframe-transport.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery.remotipart.js?body=1"></script>

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

我在其他地方读到turbolinks可能会给Bootstrap 3带来问题,甚至尝试过(然后放弃并恢复)jquery.turbolinks gem但无济于事。不用说,我不知道如何在 jsfiddle 上重现这个(抱歉)。

最后,我验证了每次单击下拉菜单时都会调用以下四个 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事件被触发,所有 JavaScript 都会根据新加载的 html 重新计算。

这包括在 application.js 中加载的 Bootstrap javascript 代码。当 bootstrap 的 javascript 重新加载时,它就会崩溃。您可以使用 data-turbolinks-eval=false 来修复此问题在 application.js <script> 中标签。

对于ERB:

<%= 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]

关于jquery - Bootstrap 3 下拉菜单不适用于 Rails 4 和 Turbolinks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com