Jquery 一次只能展开一个引导4折叠

Jquery 一次只能展开一个引导4折叠,jquery,html,bootstrap-4,collapse,Jquery,Html,Bootstrap 4,Collapse,我有这个HTML,它将有多个引导4折叠卡。我需要它一次只打开一张,如果另一张打开了,所有兄弟卡都必须隐藏。请看我的密码笔 我试图编写的函数我不确定为什么它没有呈现在任何地方。现在它只是一个console.log,但请指导我正确的方向,使之成为可能 请查看codepen以查看使用JQuery的HTML function expandOneOnly() { if ($(".panel").find(".collapse").hasClass("show")) { console.log(

我有这个HTML,它将有多个引导4折叠卡。我需要它一次只打开一张,如果另一张打开了,所有兄弟卡都必须隐藏。请看我的密码笔

我试图编写的函数我不确定为什么它没有呈现在任何地方。现在它只是一个console.log,但请指导我正确的方向,使之成为可能

请查看codepen以查看使用JQuery的HTML

function expandOneOnly() {
 if ($(".panel").find(".collapse").hasClass("show")) {
     console.log("hi");
 }

function enableNotification() {
$('.notify-check').change(function() {
    $(this).closest('.panel').find(".caret-icon").toggleClass("hide");
    $(this).closest('.panel').find(".disabled-overlay").toggleClass("hide");
    $(this).closest('.panel').find(".select-text-display").toggleClass("hide");
    if ($(this).closest('.panel').find(".collapse").hasClass("show")) {
        $(this).closest('.panel').find(".collapse").toggleClass("show");
        $(this).closest('.panel').find(".caret-icon").toggleClass('fa-caret-up fa-caret-down');
    }
     expandOneOnly();
});
}

$(document).ready(function() {
overlayWidth();
enableNotification();
expandSelection();
frequencySelection();  
});

我认为您可以简化此过程,使处理程序只具有:

function enableNotification() {
    $('.notify-check').change(function() {
        var panel = $(this).closest('.panel')
        $(this).closest('.row').children().removeClass('active')
        panel.addClass('active')
     });
}
然后,您的CSS中有以下内容:

.active .disabled-overlay {
  display: none;
}

.active .caret-icon,
.active .select-text-display,
.active .collapse {
  display: inherit;
}
这样,您只需处理当前项并添加活动类,而对于所有其他项,您只需删除该类。CSS负责处理其余部分


下面的答案很好

function expandSelection() {
$(".btn-title").click(function() {
    $(this).find(".caret-icon").toggleClass("fa-caret-up fa-caret-down");
    if ($(this).closest(".panel").siblings().find(".collapse").hasClass("show")) {
        $(this).closest(".panel").siblings().find(".collapse").removeClass("show");
        $(this).closest(".panel").siblings().find(".caret-icon").toggleClass("fa-caret-up fa-caret-down");
    }
});
}
查看更新的Codepen以获取完整的HTML、CSS和JQuery代码:


谢谢大家

第一个if语句缺少括号。可以通过将.not函数更改为:$this.closest.row.children.removeClass'active'来删除该函数;panel.addClass'active':甚至更好!谢谢:@ChrisHappy很抱歉,这些解决方案不起作用。我还看了这是一个工作的代码笔,它是有车的。当开关打开时,覆盖必须消失,点击价格标题时,展开应该显示。如果开关断开,扩展需要折叠。如果您单击其他价格标题,则第一个价格上的展开将崩溃,但覆盖不得重新出现。