【问题标题】:How to toggle accordion using Javascript/jquery如何使用 Javascript/jquery 切换手风琴
【发布时间】:2016-07-27 21:45:27
【问题描述】:

我正试图让我的手风琴切换,但似乎什么都没有发生。通过切换我的意思是单击相同的手风琴标题也应该关闭它。到目前为止,我已经设法通过单击另一个标题来使其工作,前一个标题将关闭,但关闭一个打开的标题并保持它们全部关闭似乎不起作用。

这是我的脚本:

$(document).ready(function() {
  $("#accordion section h1").click(function(e) {
    $(this).parents().siblings("section").addClass("ac_hidden");
    $(this).parents("section").removeClass("ac_hidden");
    $(this).collapse('toggle')
    e.preventDefault();
  });

});

我也尝试在函数$(#accordion).collapse('toggle'), I've tried to use('hide')` 之外播放折叠,但没有运气。

这是一个 jsfiddle:Jsfiddle

任何建议将不胜感激!

谢谢

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    试试这个

    $("#accordion section h1").click(function(e) {
      if (!$(this).closest('section').hasClass('ac_hidden')) {
        $(this).closest("section").addClass("ac_hidden");
      } else {
        $(this).closest("section").siblings().addClass("ac_hidden");
        $(this).closest("section").removeClass("ac_hidden");
      }
      e.preventDefault();
    });
    

    我已将.parents() 更改为.closest(),因为它对于这种情况来说是一个更好的选择器,它会抓取最接近点击标题的部分,这是我们想要的,然后我添加了一个检查以确保当前元素没有ac_hidden 类,如果没有,则添加它(向上滑动当前元素),否则我们将向下滑动另一个元素,并且功能几乎已经具备。希望对您有所帮助。

    jsFiddle

    【讨论】:

    • 太棒了!谢谢,它在 jsfiddle 中完美运行,但是由于某种原因(这在我的 CMS 中很常见),当我单击标题时,它会将我带到一个页面,上面写着“此地址不是我们网站上的正常页面”,然后在url 它显示# 所以由于某种原因锚标签正在干扰
    • 我真的不明白为什么 preventDefault 不起作用,您是否在页面加载时向页面添加了任何动态内容?如果是这种情况,那么您需要使用 .on('click', function(){}) 而不是 .click() 来处理它。
    • 在主页上是的,它会动态提取筹集的资金,但不是在常见问题页面上,常见问题页面只是css html和这个js代码。我认为这只是我使用 Luminate Online/Convio 的 CMS 的一些奇怪问题。这是一个可怕的系统哈哈。如果我使用 javascript:void(0) 作为 href 它工作正常,但我觉得在这种情况下使用它是一件坏事。
    • 哦! nvm 对不起,我是个白痴,我在粘​​贴你的代码时不小心替换了我的代码的 $(document).ready(function() { 部分,哈哈,现在可以完美运行了,谢谢!
    • 别担心,很高兴我能帮上忙
    【解决方案2】:

    这是我的网站 benstechgarage.com/accordion.html 上手风琴的 javascript 代码

    $('.accordion').on('click', '.accordion-control', function(e) {
          e.preventDefault();
          $(this)
            .next('.accordion-panel')
            .not(':animated')
            .slideToggle();
        });
    

    【讨论】:

      【解决方案3】:

      你只需要检查它是否有类,这样你就可以关闭它 if( !$(this).parents("section").hasClass("ac_hidden")){ $(this).parents().addClass("ac_hidden"); console.log(1) return; }

      检查一下: https://jsfiddle.net/jxyozw5c/3/

      【讨论】:

      • 感谢您的回复,似乎有很多方法可以做到这一点。我也会把它保存下来做笔记,再次感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多