表行崩溃问题

时间:2016-01-07 19:56:40

标签: javascript jquery css

我有一个包含四列的表,在最后一列中我有一个图像,当我单击图像时,我想显示子行。以下是我的代码:

<%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>
<style>
    table,th,td {
        border: 1px solid black;
    } 
</style>
<script type="text/javascript">

    function showemail(index){
        if($("#img" + index).attr("src") == "resources/details_close.png")
        {
            $("#img" + index).attr("src", "resources/details_open.png");    
            $("#email" + index).css("display", "none");
        }
        else
        {
            $("#img" + index).attr("src", "resources/details_close.png");   
            $("#email" + index).css("display", "block");
            $(".imgClass").each(function(inx){
                if(index != inx){
                    $("#email" + inx).css("display", "none");
                    $("#img" + inx).attr("src", "resources/details_open.png");  
                }
            });
        }            
    }

</script>

<table style="padding: 20px;" align="center" width="90%" class="display">
    <thead>
        <tr>
            <th width="2%">Id</th>
            <th width="10%">First Name</th>
            <th width="10%">Last Name</th>
            <th width="10%">Email</th>
        </tr>
    </thead>
    <tbody>
        <c:forEach var="items" items="${sessionScope.userList}" varStatus="loop">
            <tr>
                <td>${items.associateId }</td>
                <td>${items.firstName }</td>
                <td>${items.lastName }</td>
                <td>
                    <img alt="" src="resources/details_open.png"
                    id = "img${loop.index}" onclick="showemail(${loop.index})"
                    class="imgClass">
                </td>
            </tr>
            <tr>
                <td style="display: none" colspan="4"  id="email${loop.index}" align="center">                      
                    ${items.email}                          
                </td>
            </tr>
        </c:forEach>    
    </tbody>
</table>

问题是我不想重新调整父行列的大小,但是,如果删除style="display:none",则父列不会重新调整大小。但是,如果我保留style="display:none",那么它正在调整大小。

你能告诉我我错在哪里吗?

1 个答案:

答案 0 :(得分:0)

您应该隐藏表格行而不是单元格。您应该将显示设置为表格行,而不是阻止

$("#email"+index).css("display","table-row");

您也不需要处理所有传递的id。就个人而言,我会依赖于类而不是设置源代码并显示代码。

$("table tbody").on("click", ".imgClass", function () {

    var img = $(this);
    var isOn = img.toggleClass("on").hasClass("on");
    var nextTR = img.closest("tr").next().toggleClass("on", isOn);
    nextTR
        .siblings(".on").removeClass("on")
        .prev().find(".on")
             .removeClass("on");
  


});
table { border-collapse: collapse; }
tr, td { border: 1px solid black; }

.imgClass {
    background-color: red;
    /* Set with/height to match image */
    width: 30px;
    height: 30px;
    /*background-image: url(off.jpg); */
}

.imgClass.on {
    background-color: green;  
    /*background-image: url(on.jpg); */
}

table tbody tr:nth-child(2n+0) {
    display: none;  
}
table tbody  tr.on {
    display: table-row;  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tbody>
    <tr><td>1-1</td><td>1-2</td><td>1-3</td><td><button class="imgClass">1X</button></td></tr>
    <tr><td colspan="4">QWERTY</td></tr>
    <tr><td>2-1</td><td>2-2</td><td>2-3</td><td><button class="imgClass">2X</button></td></tr>
    <tr><td colspan="4">QWERTY</td></tr>
    <tr><td>3-1</td><td>3-2</td><td>3-3</td><td><button class="imgClass">3X</button></td></tr>
    <tr><td colspan="4">QWERTY</td></tr>
  </tbody>