1

I have a table with dynamically created rows. In every row in last column I need a button to Show/Hide invisible row under that row which you pressed button.

I have a code, but button Show/Hide working in first row and next rows without any react.

Here is my code:

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="jquery-1.9.1.js"></script>
    <script>
    $(function () {
        $('#show_more').on('click',function(){
            var id_item = $(".btn").attr( "id-data" );
            $('.hidden_row_'+id_item).addClass('hidden_row_sh').removeClass('hidden_row_hide');
            $("#wh_tbl tr.hidden_row_"+id_item).fadeIn(400);
            $(this).hide();
            $('#show_less').show();
        });
        $('#show_less').on('click',function(){
            var id_item = $(".btn").attr( "id-data" );
            $('.hidden_row_'+id_item).addClass('hidden_row_hide').removeClass('hidden_row_sh');
            $("#wh_tbl tr.hidden_row_"+id_item).fadeOut(400);
            $(this).hide();
            $('#show_more').show();
        });
    });
    </script>
    <style>
    table.ranking-table, tr, td, th {
        border-collapse:collapse;
    }
    .hidden_row_hide {
        display:none;
    }
    .hidden_row_sh {
        display:table-row;
    }
    #show_more .sign:after {
        content:"⇩";
    }
    #show_less .sign:after {
        content:"⇧";
    }
    button.btn {
        font-weight: bold;
        color: #666;
        width:100%;
        background:none;
        border:none;
    }
    button.btn:focus {
        outline:0;
    }
    </style>
</head>
<body>

<table id="wh_tbl" class="ranking-table" border="1">
    <thead>
        <tr>
            <th>#</th>
            <th style="text-align:center;">th_col2</th>
            <th style="text-align:center;">th_col3</th>
            <th style="text-align:center;">th_col4</th>
            <th style="text-align:center;">th_col5</th>
            <th style="text-align:center;">th_col6</th>
            <th style="text-align:center;">th_col7</th>
        </tr>
    </thead>
    <tbody>
    <?php 
    for($i = 0; $i <= 10; $i++)
    {
        echo '
        <tr>
            <td>'.$i.'</td>
            <td style="text-align:center;">Text_'.$i.'</td>
            <td style="text-align:center;">data_'.$i.'</td>
            <td style="text-align:center;">web_'.$i.'</td>
            <td style="text-align:center;">xxx_'.$i.'</td>
            <td style="text-align:center;">yyy_'.$i.'</td>
            <td style="text-align:center;">
                <div id="show_more">
                    <button class="btn" id-data="'.$i.'" >Pokaż <span class="sign"></span></button>
                </div>
                <div id="show_less" class="hidden_row_hide">
                    <button class="btn" id-data="'.$i.'" >Ukryj <span class="sign"></span></button>
                </div>
            </td>
        </tr>
        <tr class="hidden_row_'.$i.' hidden_row_hide">
            <td></td>
            <td>col'.$i.'1</td>
            <td>col'.$i.'2</td>
            <td>col'.$i.'3</td>
            <td>col'.$i.'4</td>
            <td>col'.$i.'5</td>
            <td>col'.$i.'6</td>
        </tr>';
    }
    ?>
    </tbody>
</table>
</body>
</html>
2
  • 1
    IDs must be unique on document context Commented Dec 14, 2017 at 12:29
  • 1
    You need to have unique id per element. Commented Dec 14, 2017 at 12:29

1 Answer 1

1

You need to have unique id per element, so change id to class like below:-

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script>
    $(function () {
        $('.show_more').on('click',function(){
            $(this).closest('tr').next('tr').removeClass('hidden_row_hide');
            $(this).hide();
            $(this).next('.show_less').show();
        });
        $('.show_less').on('click',function(){
            $(this).closest('tr').next('tr').addClass('hidden_row_hide');
            $(this).hide();
            $(this).prev('.show_more').show();
        });
    });
    </script>
    <style>
    table.ranking-table, tr, td, th {
        border-collapse:collapse;
    }
    .hidden_row_hide {
        display:none;
    }
    .hidden_row_sh {
        display:table-row;
    }
    .show_more .sign:after {
        content:"⇩";
    }
    .show_less .sign:after {
        content:"⇧";
    }
    button.btn {
        font-weight: bold;
        color: #666;
        width:100%;
        background:none;
        border:none;
    }
    button.btn:focus {
        outline:0;
    }
    </style>
</head>
<body>

<table id="wh_tbl" class="ranking-table" border="1">
    <thead>
        <tr>
            <th>#</th>
            <th style="text-align:center;">th_col2</th>
            <th style="text-align:center;">th_col3</th>
            <th style="text-align:center;">th_col4</th>
            <th style="text-align:center;">th_col5</th>
            <th style="text-align:center;">th_col6</th>
            <th style="text-align:center;">th_col7</th>
        </tr>
    </thead>
    <tbody>
    <?php 
    for($i = 0; $i <= 10; $i++)
    {
        echo '
        <tr>
            <td>'.$i.'</td>
            <td style="text-align:center;">Text_'.$i.'</td>
            <td style="text-align:center;">data_'.$i.'</td>
            <td style="text-align:center;">web_'.$i.'</td>
            <td style="text-align:center;">xxx_'.$i.'</td>
            <td style="text-align:center;">yyy_'.$i.'</td>
            <td style="text-align:center;">
                <div class="show_more">
                    <button class="btn" id-data="'.$i.'" >Pokaż <span class="sign"></span></button>
                </div>
                <div class="show_less hidden_row_hide">
                    <button class="btn" id-data="'.$i.'" >Ukryj <span class="sign"></span></button>
                </div>
            </td>
        </tr>
        <tr class="hidden_row_'.$i.' hidden_row_hide">
            <td></td>
            <td>col'.$i.'1</td>
            <td>col'.$i.'2</td>
            <td>col'.$i.'3</td>
            <td>col'.$i.'4</td>
            <td>col'.$i.'5</td>
            <td>col'.$i.'6</td>
        </tr>';
    }
    ?>
    </tbody>
</table>
</body>
</html>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.