javascript - jQuery Accordion 打开后立即关闭

标签 javascript jquery ruby-on-rails jquery-ui jquery-ui-accordion

我已经为我正在开发的一个具有 Accordion 菜单的网站修改了一些 jQuery 代码。

$(function() {
    function close_accordion_section() {
        $('.accordion-section-title').removeClass('active');
        $('.accordion-section-content').slideUp(300).removeClass('open');
    }

    $('.accordion-section-title').click(function(e) {
        // Grab current anchor value
        var currentAttrValue = $(this).attr('href');
        console.log(currentAttrValue);

        if($(e.target).is('.active')) {
            close_accordion_section();
        } else {

            // Add active class to section title
            $(this).addClass('active');
            // Open up the hidden content panel
            $(currentAttrValue).slideDown(300).addClass('open');
        }

        e.preventDefault();
    });
});

Accordion 应保持打开状态,直到再次单击为止,但由于某种原因,它在打开后立即关闭,有点像用松紧皮带固定。

我更希望 Accordion 仅在用户单击它时关闭。我复制了下面的 .html.erb 文件。

<div class="copytext text-box col-5">

  <h2>Optimisation, Forecasting, Sales and Marketing Alignment</h2> 

  <div class="accordion-section">
    <a class="accordion-section-title" href="#optimisation-accordbar">Optimisation</a>

    <div id="optimisation-accordbar" class="accordion-section-content">
      <p>In short, optimisation is getting the best out of what you have.</p>
    </div>
  </div>

  <div class="accordion-section">
    <a class="accordion-section-title" href="#margin-improvement-accordbar">Margin Improvement</a>

    <div id="margin-improvement-accordbar" class="accordion-section-content">
      <p>Margin improvement is about making more profit by improving what you already do.</p>
    </div>
  </div>

  <div class="accordion-section">
    <a class="accordion-section-title" href="#forecasting-accordbar">Forecasting</a>

    <div id="forecasting-accordbar" class="accordion-section-content">
      <p>Forecasting is the act of getting the sales team to stop producing works of fantasy and produce figures which production believe enough to manufacture to.</p>
      <p>Aligning sales and marketing is ensuring that marketing activities are such that they drive the sales team towards their turnover targets but now, so that they drive the sales team to sell the products which make the company the greatest profit based on the mix of products they sell.</p>
      <p>We can address all of these areas without telling you about some new specialized piece of machinery would reduce faults, 
    make things faster and replace 5 shop floor operatives.</p>
      <p>In fact, our optimisation models often show that the introduction of an expensive but appropriate piece of automated production will indeed increase the profits as expected, but it often shows up the rather than dismissing the now unwanted labour, the firm can make even greater profits by redeploying them.<p/>
      <p>A sales plan or manufacturing plan or an investment justification plan cannot show the interactions which Linear Programming Optimisation can,
        and often to the shock of the accountants, a labour cost can be a large profit improvement if deployed wisely and modeled correctly.</p>
    </div>
  </div>
</div>

SCSS 如下。

/* Transitions */

.accordion, .accordion * {
    -webkit-box-sizing:border-box; 
    -moz-box-sizing:border-box; 
    box-sizing:border-box;
}

.accordion {
    cursor: pointer;
    overflow:hidden;
    box-shadow:0px 1px 3px rgba(0,0,0,0.25);
    border-radius:3px;
    background:#f7f7f7;
}

.accordion-section-title {
    width:100%;
    padding:15px;
    display:inline-block;
    background:#eee;
    @include default-border;
    transition:all linear 0.15s;
    font-size:1.200em;
    text-shadow:1px 1px 0px #555;
    text-decoration: none;
}

.accordion-section-title.active, .accordion-section-title:hover {
    background:#4c4c4c;
    text-decoration:none;
}

.accordion-section-content {
    padding:15px;
    display:none;
}

如果有人可以帮助我弄清楚发生了什么以及如何让 Accordion 保持打开状态直到用户再次单击它,我将非常感激,因为我已经完成了各种调试步骤,但我仍然无法找出问题所在。

最佳答案

您的问题似乎与重复执行同一件事有关。在不加载除 jQuery 之外的任何其他库的情况下,您的代码似乎 work fine ,除非当您打开多个实例并尝试关闭其中任何一个实例时,它会错误地关闭所有实例,而不仅仅是当前实例。

我最好的猜测是您正在加载一些其他脚本/库(可能是jQuery-ui?),它已经为您使用的提供了打开/关闭功能关于你的元素。所以你有两个选择:

  1. 使用您正在使用的任何库的当前打开/关闭功能 - 这意味着放弃当前的自定义动画。
  2. 滚动您的自定义动画,但使用不同的类名,因此库不会为您打开/关闭它们。

关于javascript - jQuery Accordion 打开后立即关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055612/

相关文章:

ruby-on-rails - RSpec:避免使用允许接收的任何实例

javascript - jQuery Uncaught SyntaxError : Unexpected Identifier but my code looks good!(我认为)

javascript - 如何使用 Protractor 获取当前 url?

ruby-on-rails - Rails 6-常量ActionController::InvalidAuthenticityToken

javascript - IE 焦点后跳转到文本区域的开头

jquery - Bootstrap Menu DropDown 在带有嵌入式 header.html 文件的页面上不起作用

ruby-on-rails - 将 attr_encrypted 与客户提供的 key 一起使用(未存储在数据库中)

javascript - 是否可以获取文本(innerHTML)并将其转换为 JavaScript 代码?

Javascript:生成具有固定均值和标准差的随机数

jQuery - 单击时,使用弹跳效果对 div 的高度进行动画处理