【问题标题】:Jquery chevron icon not toggling down with accordion row when collapsed折叠时,Jquery chevron 图标不与手风琴行向下切换
【发布时间】:2015-11-29 22:23:58
【问题描述】:

首先,我的小提琴:http://jsfiddle.net/34y943qq/

我有一个带有手风琴属性的引导表,单击时会展开子行。当我单击另一行时,它会展开并折叠先前打开的行。这可行,但是我用来指示下拉状态的 V 形图标似乎没有翻转。

我进行了更改http://jsfiddle.net/34y943qq/1/,但这似乎也不会导致以前的切换 V 形崩溃。我可以让雪佛龙切换回来的唯一方法是直接点击一行来打开/关闭它。

这是我添加的 jscript:

$(this).find('span').closest('.chevron_toggleable')
    .not(this)
    .toggleClass('glyphicon-chevron-up glyphicon-chevron-down');

我也尝试将“.not(this)”移动到 find('span') ,但这似乎也不起作用。

我错过了什么?

生成表格的代码如下:

 if (mysqli_num_rows($result)) {
    echo '<table id="dasTable" cellpadding="0" cellspacing="0" class="table table-hover table-bordered tablesorter">';
    echo '<thead>';
    echo '<tr><th>Service ID</th><th>Assigned Namespace</th><th>DAS Station</th><th>Ingest Completed</th><th>Currently Ingesting</th><th>Offsite going to DAS</th><th>Mounted</th></tr></thead>';
    echo '<tbody>';

    // Generate rows from current das information
    while ($row2 = mysqli_fetch_row($result)) {

        // Format cell background based on content
        $sidvalue       = $row2[0];
        $station        = $row2[1];
        $used           = $row2[2];
        $attacheddate   = $row2[3];
        $starteddate    = $row2[4];
        $ingestcomplete = $row2[5];
        $ingesting      = $row2[6];
        $updating       = $row2[7];
        $mounted        = $row2[8];
        $totaljobs      = $row2[9];
        $remainingjobs  = $row2[10];
        $assigned       = $row2[11];
        echo '<tr class="accordion-toggle" data-toggle="collapse" id="', $sidvalue, '" data-target=".', $sidvalue, '">';
        echo '<td class="rowtd"><span class="chevron_toggleable glyphicon glyphicon-chevron-down"></span> ', $sidvalue, '</td>';
        echo '<td class="rowtd">', $assigned, '</td>';
        echo '<td class="rowtd">', $station, '</td>';
        echo '<td class="rowtd">', $ingestcomplete, '</td>';
        if ($ingesting == 'GREEN') {
            echo '<td class="success">YES</td>';
        } else {
            if ($ingestcomplete != 'NO') {
                echo '<td class="success">NO</td>';
            } else {
                echo '<td class="danger">NO</td>';
            }
        }

        if ($updating == 'GREEN') {
            echo '<td class="success">NO</td>';
        } else {
            echo '<td class="danger">YES</td>';
        }

        if ($mounted == 'GREEN') {
            echo '<td class="success">YES</td>';
        } else {
            if ($ingestcomplete != 'NO') {
                echo '<td class="success">NO</td>';
            } else {

                echo '<td class="danger">NO</td>';
            }
        }
     echo '</tr>';

实际上,我看到它在哪里被调用了两次:

 // create the sub row
            echo '<tr class="expand-child collapse ', $sidvalue, '">';
            echo '<td class="h4" colspan="3"><b>Attached Date:</b> ', $attacheddate, '</td>';
            $usedgb = round($used / 1024 / 1024 / 1024);
            echo '<td class="h4" colspan="4"><i class="fa fa-hdd-o fa-lg"></i> ', $used, ' Bytes (', $usedgb, ' GB)</td>';
            echo '</tr>';
            echo '<tr class="expand-child collapse ', $sidvalue, '">';
            echo '<td class="h4" colspan="3"><b>Ingest Start Date:</b> ', $starteddate, '</td>';
            echo '<td class="h4" colspan="4">';
            echo '<div class="progress">';
            if ($remainingjobs == 0) {
                $jobsdone = $totaljobs - 1;
                $percentdone = round($jobsdone / $totaljobs * 100);
                echo '<div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="', $percentdone, '" aria-valuemin="0" aria-valuemax="100" style="width:', $percentdone, '%">Last Job</div>';
            } else {
                $jobsdone = $totaljobs - $remainingjobs;
                $percentdone = round($jobsdone / $totaljobs * 100, 1);
                echo '<div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100" style="width:', $percentdone, '%"><b>', $jobsdone, '/', $totaljobs, ' (', $percentdone, '%)</b></div>';
            }
            echo '</div>';
            echo '</td>';
            echo '</tr>';
        }

它们都被称为“扩展子崩溃”的原因是由于我不久前发现的关于如何扩展行的 SO 问题...我现在正在尝试找到链接,但我相信要点是每个子行需要相同的折叠名称,因此当单击父行时,它将折叠所有子行。

编辑:我们去Creating Accordion Table with Bootstrap

该示例对于每个扩展行都有 1 个子行,我添加了第二行以相同的名称进行扩展,基于此处找到的代码:http://www.bootply.com/122871

【问题讨论】:

    标签: javascript jquery twitter-bootstrap


    【解决方案1】:

    演示:http://jsfiddle.net/rn07jq35/2/ 检查前三行与其余行的性能比较

    正在工作,没有时间尝试。

    我已经编辑了这个问题的答案

    $(document).ready(function () {
        $(function () {
            $("#dasTable").tablesorter();
        });
    });
    $('.collapse').on('show.bs.collapse', function (e) {
        $("#dasTable").find('.collapse.in').collapse('hide');
    
        var targetx = $(this).data('trigger');
        $(targetx).find('span').toggleClass('glyphicon-chevron-up glyphicon-chevron-down');
    });
    $('.collapse').on('hide.bs.collapse', function (e) {
        var targetx = $(this).prev('.accordion-toggle').find('span');
        var targetx = $(this).data('trigger');
        $(targetx).find('span').toggleClass('glyphicon-chevron-up glyphicon-chevron-down');
    });
    

    关于孩子的事情是这样的

            <tr class="accordion-toggle" data-toggle="collapse" id="1dc4" data-target=".1dc4">
                <td class="rowtd"> <span class="chevron_toggleable glyphicon glyphicon-chevron-down"></span> 1dc4</td>
                <td class="rowtd">Gen2_SJC9</td>
                <td class="rowtd">adsdas5</td>
                <td class="rowtd">NO</td>
                <td class="success">YES</td>
                <td class="success">NO</td>
                <td class="success">YES</td>
            </tr>
            <tr class="expand-child">
                <td colspan="7">
                    <div class="container collapse 1dc4" data-trigger="#1dc4">
                        <div class="left"><b>Attached Date:</b>2015-08-26 16:42:04</div>
                        <div class="right"><i class="fa fa-hdd-o fa-lg"></i> 2883577569280 Bytes (2686 GB)</div>
                        <div class="left"><b>Ingest Start Date:</b> 2015-08-31 19:10:14</div>
                        <div class="right">
                            <div class="progress">
                                <div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100" style="width:86.7%"><b>13/15 (86.7%)</b>
                                </div>
                            </div>
                        </div>
                    </div>
                </td>
            </tr>
    

    所以你基本上只有一个孩子。然后你把你的折叠放在你的&lt;div&gt;标签而不是你的&lt;tr&gt;标签中。

    希望这会有所帮助。

    【讨论】:

    • RE:打开两次,这是一个好问题,不应该发生(我想知道为什么它在打开/折叠时有轻微的延迟,并且不像其他演示那样平滑)。我将使用生成表格的代码发布对此的答案,但我不知道为什么它会执行两次。
    • 这有效,除了进度条和已用空间字段在展开时会向左对齐。在 jsfiddle 中,默认情况下您不会注意到它,但是如果您向左滑动窗格(因此结果会占用更多空间,一旦展开一行,您就会注意到它”就好像“正确”的 div 不是t 尊重 50% 的宽度。
    • 制作 .collapse.in display:block; jsfiddle.net/rn07jq35/3 看看,如果这样可以解决您的问题。
    • 解决了。谢谢你,先生!作为替代方案,将右侧宽度更改为 400px 也解决了这个问题,但保持它与上面的列边框对齐……使用 display:block 它稍微向左拉,我的团队认为这会使行更加突出。谢谢!
    【解决方案2】:

    我会将交换 chevron 部分放在 click 函数中,如下所示:

    $('.accordion-toggle').on('click', function() {
        $('.chevron_toggleable').removeClass('glyphicon-chevron-up').addClass('glyphicon-chevron-down');
        $(this).find('span').closest('.chevron_toggleable').toggleClass('glyphicon-chevron-down glyphicon-chevron-up');
    });
    

    JSFiddle

    【讨论】:

    • 我什至没想过要先把课程清完。这行得通,所以接受这个
    猜你喜欢
    • 2011-10-01
    • 2012-11-21
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2012-04-26
    • 2015-05-08
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多