确定Bootstrap可折叠元素的崩溃状态

Dav*_*rer 1 jquery collapse twitter-bootstrap

我为用户显示警报,直到货物密度超过某个值.当页面加载时,运行一个函数来处理所有这些计算(如果用户正在加载某些东西而不是从头开始),如果密度小于X,则显示折叠,否则它将被隐藏.

问题是,在已经隐藏/显示的元素上调用.collapse('hide')或.collapse('show')会导致它执行相反的操作.

我这样定义我的警报:

<div class="row spacer-bottom collapse in" id="cubicCapacityWarn">

    <div class="span8 offset1">

        <div class="alert alert-error">
            <h4><strong>Cubic Capacity Warning!</strong></h4>
            Shipment Total PCF less than 6, you may be assessed Cubic Capacity surcharges!
        </div>

    </div>

</div>
Run Code Online (Sandbox Code Playgroud)

处理所有这些的jQuery:

function updateTotals() {

    var total_weight, total_volume, total_density;

    total_weight = 0;
    total_volume = 0;
    total_density = 0;

    $('#units').find('table.unit').each(function(index){

        var weight, volume, density;

        weight = 0;
        volume = 0;
        density = 0;

        volume = parseFloat($(this).find('.unit_cube').text(), 10);

        $(this).find('tbody.products tr').each(function(pIndex){

            weight += parseFloat($(this).find('.weight').text(), 10);

        });

        density = weight / volume;
        density = density.toFixed(2);

        $(this).find('.unit_density').text(density);

        total_weight += (weight * parseInt($(this).find('.unit_num_of').text(), 10));
        total_volume += (volume * parseInt($(this).find('.unit_num_of').text(), 10));

    });


    total_density = total_weight / total_volume;

    $('#total_weight').text(total_weight.toFixed(2));
    $('#total_volume').text(total_volume.toFixed(2));
    if(isNaN(total_density.toFixed(2))) {
        $('#total_density').text("0.00").trigger('change');
    } else {
        $('#total_density').text(total_density.toFixed(2)).trigger('change');
    }

}

$('#cubicCapacityWarn').collapse({toggle: false})

$('#cubicCapacityWarn').on('shown', function(event){
    event.stopPropagation();
    return false;
});

$('#cubicCapacityWarn').on('hidden', function(event){
    alert('hidden')
    event.stopPropagation();
    return false;
});

$('#total_density').change(function(){

    if(parseFloat($(this).text()) < 6) {

        $('#cubicCapacityWarn').collapse('show');
        alert('show')

    } else {

        $('#cubicCapacityWarn').collapse('hide');

    }

});

updateTotals();
Run Code Online (Sandbox Code Playgroud)

我想通过在调用.collapse('show'|'hide')之前测试它是否已经崩溃来解决这个问题,但我不知道如何.如果对这个问题有一个更优雅的解决方案,我很乐意听到它.

此外,我发现这个问题如果第一次崩溃调用是隐藏,折叠将显示在这里似乎相关,但我添加了$('#...').collapse({toggle: false});没有效果.

小智 9

我知道这是一篇较旧的帖子,但我也一直坚持这个帖子。因此,在 bootstrap 4.1 中,我使用它来检查手风琴的状态:

var isVisible = $('#collapseOne').is( ":visible" );
alert(isVisible);
Run Code Online (Sandbox Code Playgroud)

反之亦然,如果您想检查它是否隐藏:

var isHidden = $('#collapseOne').is( ":hidden" );
alert(isHidden);
Run Code Online (Sandbox Code Playgroud)


GGl*_*and 5

例如,我使用它来确定元素collapseTwo是否已关闭,然后打开它.当然,也是相反的方式.

if ($('#collapseTwo').attr('aria-expanded') == "false") {$('#collapseTwo').collapse('show');}
Run Code Online (Sandbox Code Playgroud)