【问题标题】:Bootstrap Collapse - Jquery "Collapse all" functionBootstrap Collapse - Jquery“全部折叠”功能
【发布时间】:2013-09-25 20:57:22
【问题描述】:

我正在使用前端的 Bootstrap 编写个人提要阅读器,并想添加一个“全部折叠/展开”按钮。

这是我的第一个 JavaScript/JQuery 代码,所以除了在 Firefox 开发者控制台中打印变量外,我不知道如何调试它。

我的页面结构由面板组成。用户可以通过单击面板标题来展开或折叠面板。还有一个用于折叠或展开所有面板的按钮。

我的解决方案在大多数情况下都有效,但我注意到一个奇怪的行为。这是我重现问题的方法:

  1. 第一次打开页面
  2. 单击标题可展开一个面板
  3. 现在折叠所有按钮折叠打开的面板,并展开其他面板。好像它“切换”了所有面板而不是关闭它们。
  4. 发生这种奇怪的行为后,一切正常,如果不刷新页面,我无法重现问题。每一步open_panel_count 变量看起来都很正常。

这是我正在使用的方法:

$(function() {
  open_panel_count = 0;
  function update_toggle_button() { 
    $('#toggle-btn').text((open_panel_count ? "Collapse" : "Expand") + " All")
  }
  update_toggle_button(); // Run once on page load to text #toggle-btn

  $('#toggle-btn').click(function() {
    $('.panel-collapse').collapse(open_panel_count ? 'hide' : 'show');
  });

  $('.panel-collapse').on('shown.bs.collapse', function () {
    open_panel_count++;
    update_toggle_button();
  });

  $('.panel-collapse').on('hidden.bs.collapse', function () {
    open_panel_count--;
    update_toggle_button();
  });
});

谁能指出我做错了什么?

您可以在以下位置查看整个模板:https://github.com/utdemir/furby/blob/master/template.erb 并访问演示:http://p.cogunluklazararsiz.org/furby/

【问题讨论】:

    标签: javascript jquery twitter-bootstrap


    【解决方案1】:
    $('.panel-collapse').collapse('hide');
    

    Bootstrap/JQuery Collapse

    【讨论】:

    • 在 Chrome 中似乎不起作用... JavaScript 调试器说“折叠不是函数”:-/
    【解决方案2】:

    根据 Twitter Bootstrap 文档,您可以“将您的内容激活为可折叠元素。”,通过运行:

    $('.panel-collapse').collapse({
      toggle: false
    });
    

    添加它应该可以解决您的问题。试一试。

    $(function() {
      $('.panel-collapse').collapse({
        toggle: false
      });
    
    ...
    

    http://getbootstrap.com/javascript/#collapse

    不知道为什么 twitter JS 没有收到你的 data-target="#entry419294611" data-toggle="collapse"。不费吹灰之力就很难调试。

    【讨论】:

    • 如果您使用的是 Firefox,firebug 插件是您可能需要考虑的非常流行的调试工具。
    • 谢谢,这解决了我的问题,但我不知道为什么,我没有在任何地方切换它。现在寻找 Firebug。
    【解决方案3】:

    尝试改变

      $('#toggle-btn').click(function() {
        $('.panel-collapse').collapse(open_panel_count ? 'hide' : 'show');
      });
    

    对于

      $('#toggle-btn').click(function() {
        var state = open_panel_count ? 'hide' : 'show';
        $('.panel-collapse').collapse(state);
      });
    

    【讨论】:

    • 对不起,这不会改变任何事情。当我认为表达式只会计算一次并且两个代码相同时,我错了吗?
    • 查看折叠代码 (github.com/twbs/bootstrap/blob/master/js/collapse.js) 它看起来像运行一个 jquery.each 然后我认为它是为每个带有类 panel-collapse 的元素进行评估
    猜你喜欢
    • 2016-11-18
    • 2013-09-20
    • 2014-03-30
    • 1970-01-01
    • 2011-04-21
    • 2013-02-08
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多