Twitter bootstrap 引导下拉菜单只工作一次

Twitter bootstrap 引导下拉菜单只工作一次,twitter-bootstrap,Twitter Bootstrap,这一定很简单,但我不知道如何纠正它。我正在使用Bootstrap3下拉菜单CSS和JS 问题是:我点击下拉菜单,它就工作了。我从下拉菜单中选择一个链接,当它将我带到该页面时,下拉菜单在该页面上不起作用 下拉菜单只能工作1次 application.HTML.erb中的HTML: <ul class="list-unstyled"> <li class="dropdown"> <div class="btn btn-primary

这一定很简单,但我不知道如何纠正它。我正在使用Bootstrap3下拉菜单CSS和JS

问题是:我点击下拉菜单,它就工作了。我从下拉菜单中选择一个链接,当它将我带到该页面时,下拉菜单在该页面上不起作用

下拉菜单只能工作1次

application.HTML.erb中的HTML:

<ul class="list-unstyled">   
      <li class="dropdown">  
        <div class="btn btn-primary btn-pages" data-toggle="dropdown">Dropdown <a href="#" id="pages" class="dropdown-toggle"><i class="icon-caret-down"></i></a></div>
        <ul class="dropdown-menu" aria-labelledby="pages"> 
          <li><%= link_to("Contacts", contacts_path) %></li>
        </ul>
      </li>
     </ul>
   <!-- jQuery & Javascript CDN Includes -->
<%= javascript_include_tag "application" %>
<script src="//code.jquery.com/jquery.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
JS和jQuery加载在application.html.erb中:

<ul class="list-unstyled">   
      <li class="dropdown">  
        <div class="btn btn-primary btn-pages" data-toggle="dropdown">Dropdown <a href="#" id="pages" class="dropdown-toggle"><i class="icon-caret-down"></i></a></div>
        <ul class="dropdown-menu" aria-labelledby="pages"> 
          <li><%= link_to("Contacts", contacts_path) %></li>
        </ul>
      </li>
     </ul>
   <!-- jQuery & Javascript CDN Includes -->
<%= javascript_include_tag "application" %>
<script src="//code.jquery.com/jquery.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
看起来操作所需的JS或jQuery不会在页面更改时重新加载。我做错了什么

谢谢

编辑:JS代码

+function ($) { "use strict";

  // DROPDOWN CLASS DEFINITION
  // =========================

  var backdrop = '.dropdown-backdrop'
  var toggle   = '[data-toggle=dropdown]'
  var Dropdown = function (element) {
    var $el = $(element).on('click.bs.dropdown', this.toggle)
  }

  Dropdown.prototype.toggle = function (e) {
    var $this = $(this)

    if ($this.is('.disabled, :disabled')) return

    var $parent  = getParent($this)
    var isActive = $parent.hasClass('open')

    clearMenus()

    if (!isActive) {
      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
        // if mobile we we use a backdrop because click events don't delegate
        $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
      }

      $parent.trigger(e = $.Event('show.bs.dropdown'))

      if (e.isDefaultPrevented()) return

      $parent
        .toggleClass('open')
        .trigger('shown.bs.dropdown')

      $this.focus()
    }

    return false
  }

  Dropdown.prototype.keydown = function (e) {
    if (!/(38|40|27)/.test(e.keyCode)) return

    var $this = $(this)

    e.preventDefault()
    e.stopPropagation()

    if ($this.is('.disabled, :disabled')) return

    var $parent  = getParent($this)
    var isActive = $parent.hasClass('open')

    if (!isActive || (isActive && e.keyCode == 27)) {
      if (e.which == 27) $parent.find(toggle).focus()
      return $this.click()
    }

    var $items = $('[role=menu] li:not(.divider):visible a', $parent)

    if (!$items.length) return

    var index = $items.index($items.filter(':focus'))

    if (e.keyCode == 38 && index > 0)                 index--                        // up
    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
    if (!~index)                                      index=0

    $items.eq(index).focus()
  }

  function clearMenus() {
    $(backdrop).remove()
    $(toggle).each(function (e) {
      var $parent = getParent($(this))
      if (!$parent.hasClass('open')) return
      $parent.trigger(e = $.Event('hide.bs.dropdown'))
      if (e.isDefaultPrevented()) return
      $parent.removeClass('open').trigger('hidden.bs.dropdown')
    })
  }

  function getParent($this) {
    var selector = $this.attr('data-target')

    if (!selector) {
      selector = $this.attr('href')
      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
    }

    var $parent = selector && $(selector)

    return $parent && $parent.length ? $parent : $this.parent()
  }


  // DROPDOWN PLUGIN DEFINITION
  // ==========================

  var old = $.fn.dropdown

  $.fn.dropdown = function (option) {
    return this.each(function () {
      var $this = $(this)
      var data  = $this.data('dropdown')

      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
      if (typeof option == 'string') data[option].call($this)
    })
  }

  $.fn.dropdown.Constructor = Dropdown


  // DROPDOWN NO CONFLICT
  // ====================

  $.fn.dropdown.noConflict = function () {
    $.fn.dropdown = old
    return this
  }


  // APPLY TO STANDARD DROPDOWN ELEMENTS
  // ===================================

  $(document)
    .on('click.bs.dropdown.data-api', clearMenus)
    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
    .on('click.bs.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)
    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)

}(window.jQuery);

废话-为bootstrap JS刮取CDN并将其放在本地。下拉菜单现在适用于所有页面


CDN没有加载到子页面中时一定发生了什么事情。

你能发布js包含代码吗?当然,只是发布了。这样我就不会感到困惑了,它只在索引页面上工作?或者,如果加载任何页面,那么它只能工作一次?所以,如果你反复地重新加载任何页面,它在第一次加载时都会正常工作?而且,我不知道你为什么要在application.html.erb中包含JS。你是通过gem安装引导程序的吗?如果是这样的话,它是或者可能应该是//require bootstrap在application.js文件中。然后它将在应用程序文件中生成。另外,您使用的是less还是sass版本?是的,该功能仅在索引页上有效-没有其他页面。如果我重新加载索引页,是的,它会反复工作。是的,我也有同样的问题。在每个html中包含引导JS文件对我来说也很有用。谢谢